Skip to content
Extraits de code Groupes Projets
Valider 72547e0d rédigé par maieul@maieul.net's avatar maieul@maieul.net
Parcourir les fichiers

vider $_FILES[champ][int] si jamais il y a une erreur

parent 8ac05fe7
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
<?php
/**
* Gestion de l'affichage et traitement d'un formulaire Formidable
*
* @package SPIP\Formidable\Formulaires
**/
* Gestion de l'affichage et traitement d'un formulaire Formidable
*
* @package SPIP\Formidable\Formulaires
**/
// Sécurité
if (!defined('_ECRIRE_INC_VERSION')) {
return;
return;
}
include_spip('inc/formidable');
include_spip('inc/saisies');
include_spip('base/abstract_sql');
include_spip('inc/autoriser');
include_spip('plugins/installer');
function formidable_id_formulaire($id) {
// on utilise une static pour etre sur que si l'appel dans verifier() passe, celui dans traiter() passera aussi
// meme si entre temps on perds la base
static $id_formulaires = array();
if (isset($id_formulaires[$id])) {
return $id_formulaires[$id];
}
// on utilise une static pour etre sur que si l'appel dans verifier() passe, celui dans traiter() passera aussi
// meme si entre temps on perds la base
static $id_formulaires = array();
if (isset($id_formulaires[$id])) {
return $id_formulaires[$id];
}
if (is_numeric($id)) {
$where = 'id_formulaire = ' . intval($id);
} elseif (is_string($id)) {
$where = 'identifiant = ' . sql_quote($id);
} else {
return 0;
}
if (is_numeric($id)) {
$where = 'id_formulaire = ' . intval($id);
} elseif (is_string($id)) {
$where = 'identifiant = ' . sql_quote($id);
} else {
return 0;
}
$id_formulaire = intval(sql_getfetsel('id_formulaire', 'spip_formulaires', $where));
$id_formulaire = intval(sql_getfetsel('id_formulaire', 'spip_formulaires', $where));
if ($id_formulaire
and !test_espace_prive()
and !objet_test_si_publie('formulaire', $id_formulaire)) {
return $id_formulaires[$id] = 0;
}
if ($id_formulaire
and !test_espace_prive()
and !objet_test_si_publie('formulaire', $id_formulaire)) {
return $id_formulaires[$id] = 0;
}
return $id_formulaires[$id] = $id_formulaire;
return $id_formulaires[$id] = $id_formulaire;
}
/**
* Chargement du formulaire CVT de Formidable.
*
* Genere le formulaire dont l'identifiant (numerique ou texte est indique)
*
* @param int|string $id
* Identifiant numerique ou textuel du formulaire formidable
* @param array $valeurs
* Valeurs par défauts passées au contexte du formulaire
* Exemple : array('hidden_1' => 3) pour que champ identifie "@hidden_1@" soit prerempli
* @param int|bool $id_formulaires_reponse
* Identifiant d'une réponse pour forcer la reedition de cette reponse spécifique
*
* @return array
* Contexte envoyé au squelette HTML du formulaire.
**/
* Chargement du formulaire CVT de Formidable.
*
* Genere le formulaire dont l'identifiant (numerique ou texte est indique)
*
* @param int|string $id
* Identifiant numerique ou textuel du formulaire formidable
* @param array $valeurs
* Valeurs par défauts passées au contexte du formulaire
* Exemple : array('hidden_1' => 3) pour que champ identifie "@hidden_1@" soit prerempli
* @param int|bool $id_formulaires_reponse
* Identifiant d'une réponse pour forcer la reedition de cette reponse spécifique
*
* @return array
* Contexte envoyé au squelette HTML du formulaire.
**/
function formulaires_formidable_charger($id, $valeurs = array(), $id_formulaires_reponse = false) {
$contexte = array();
$contexte = array();
// On peut donner soit un id soit un identifiant
if (!$id_formulaire = formidable_id_formulaire($id)) {
return;
}
// On peut donner soit un id soit un identifiant
if (!$id_formulaire = formidable_id_formulaire($id)) {
return;
}
// On cherche si le formulaire existe
if ($formulaire = sql_fetsel('*', 'spip_formulaires', 'id_formulaire = ' . intval($id_formulaire))) {
// On ajoute un point d'entrée avec les infos de ce formulaire
// pour d'eventuels plugins qui en ont l'utilité
$contexte['_formidable'] = $formulaire;
// Classes CSS
$contexte['_css'] = $formulaire['css'];
// Est-ce que la personne a le droit de répondre ?
if (autoriser('repondre', 'formulaire', $formulaire['id_formulaire'], null, array('formulaire' => $formulaire))) {
$saisies = unserialize($formulaire['saisies']);
$traitements = unserialize($formulaire['traitements']);
// Si on est en train de réafficher les valeurs postées,
// ne pas afficher les saisies hidden
if ($formulaire['apres'] == 'valeurs'
and _request('formidable_afficher_apres') == 'valeurs'
) {
foreach ($saisies as $k => $saisie) {
if (isset($saisie['saisie'])
and $saisie['saisie'] == 'hidden'
) {
unset($saisies[$k]);
}
// On cherche si le formulaire existe
if ($formulaire = sql_fetsel('*', 'spip_formulaires', 'id_formulaire = ' . intval($id_formulaire))) {
// On ajoute un point d'entrée avec les infos de ce formulaire
// pour d'eventuels plugins qui en ont l'utilité
$contexte['_formidable'] = $formulaire;
// Classes CSS
$contexte['_css'] = $formulaire['css'];
// Est-ce que la personne a le droit de répondre ?
if (autoriser('repondre', 'formulaire', $formulaire['id_formulaire'], null, array('formulaire' => $formulaire))) {
$saisies = unserialize($formulaire['saisies']);
$traitements = unserialize($formulaire['traitements']);
// Si on est en train de réafficher les valeurs postées,
// ne pas afficher les saisies hidden
if ($formulaire['apres'] == 'valeurs'
and _request('formidable_afficher_apres') == 'valeurs'
) {
foreach ($saisies as $k => $saisie) {
if (isset($saisie['saisie'])
and $saisie['saisie'] == 'hidden'
) {
unset($saisies[$k]);
}
}
}
// On déclare les champs avec les valeurs par défaut
$contexte = array_merge(saisies_lister_valeurs_defaut($saisies), $contexte);
$contexte['mechantrobot'] = '';
// On ajoute le formulaire complet
$contexte['_saisies'] = $saisies;
$contexte['id'] = $formulaire['id_formulaire'];
$contexte['_hidden'] = '<input type="hidden" name="id_formulaire" value="' . $contexte['id'] . '"/>';
// S'il y a des valeurs par défaut dans l'appel, alors on pré-remplit
if ($valeurs) {
// Si c'est une chaine on essaye de la parser
if (is_string($valeurs)) {
$liste = explode(',', $valeurs);
$liste = array_map('trim', $liste);
$valeurs = array();
foreach ($liste as $i => $cle_ou_valeur) {
if ($i%2 == 0) {
$valeurs[$liste[$i]] = $liste[$i+1];
}
// On déclare les champs avec les valeurs par défaut
$contexte = array_merge(saisies_lister_valeurs_defaut($saisies), $contexte);
$contexte['mechantrobot'] = '';
// On ajoute le formulaire complet
$contexte['_saisies'] = $saisies;
$contexte['id'] = $formulaire['id_formulaire'];
$contexte['_hidden'] = '<input type="hidden" name="id_formulaire" value="' . $contexte['id'] . '"/>';
// S'il y a des valeurs par défaut dans l'appel, alors on pré-remplit
if ($valeurs) {
// Si c'est une chaine on essaye de la parser
if (is_string($valeurs)) {
$liste = explode(',', $valeurs);
$liste = array_map('trim', $liste);
$valeurs = array();
foreach ($liste as $i => $cle_ou_valeur) {
if ($i%2 == 0) {
$valeurs[$liste[$i]] = $liste[$i+1];
}
}
}
// Si on a un tableau,
// alors on écrase avec les valeurs données depuis l'appel
if ($valeurs and is_array($valeurs)) {
$contexte = array_merge($contexte, $valeurs);
}
// Si on a un tableau,
// alors on écrase avec les valeurs données depuis l'appel
if ($valeurs and is_array($valeurs)) {
$contexte = array_merge($contexte, $valeurs);
}
}
// Si on passe un identifiant de reponse, on edite cette reponse si elle existe
if ($id_formulaires_reponse = intval($id_formulaires_reponse)) {
$contexte = formidable_definir_contexte_avec_reponse($contexte, $id_formulaires_reponse, $ok);
if ($ok == false) {
$contexte['editable'] = false;
$contexte['message_erreur'] = _T('formidable:traiter_enregistrement_erreur_edition_reponse_inexistante');
}
} else {
// calcul des paramètres d'anonymisation
$options = isset($traitements['enregistrement']) ? $traitements['enregistrement'] : null;
$anonymisation = (isset($options['anonymiser']) && $options['anonymiser']==true)
? isset($options['anonymiser_variable']) ? $options['anonymiser_variable'] : ''
: '';
// Si multiple = non mais que c'est modifiable, alors on va chercher
// la dernière réponse si elle existe
if ($options
and !$options['multiple']
and $options['modifiable']
and $reponses = formidable_verifier_reponse_formulaire($formulaire['id_formulaire'], $options['identification'], $anonymisation)
) {
$id_formulaires_reponse = array_pop($reponses);
$contexte = formidable_definir_contexte_avec_reponse($contexte, $id_formulaires_reponse, $ok);
}
// Si on passe un identifiant de reponse, on edite cette reponse si elle existe
if ($id_formulaires_reponse = intval($id_formulaires_reponse)) {
$contexte = formidable_definir_contexte_avec_reponse($contexte, $id_formulaires_reponse, $ok);
if ($ok == false) {
$contexte['editable'] = false;
$contexte['message_erreur'] = _T('formidable:traiter_enregistrement_erreur_edition_reponse_inexistante');
}
} else {
$contexte['editable'] = false;
// le formulaire a déjà été répondu.
// peut être faut il afficher les statistiques des réponses
if ($formulaire['apres']=='stats') {
// Nous sommes face à un sondage auquel on a déjà répondu !
// On remplace complètement l'affichage du formulaire
// par un affichage du résultat de sondage !
$contexte['_remplacer_formulaire'] = recuperer_fond('modeles/formulaire_analyse', array(
'id_formulaire' => $formulaire['id_formulaire'],
));
} else {
$contexte['message_erreur'] = _T('formidable:traiter_enregistrement_erreur_deja_repondu');
// calcul des paramètres d'anonymisation
$options = isset($traitements['enregistrement']) ? $traitements['enregistrement'] : null;
$anonymisation = (isset($options['anonymiser']) && $options['anonymiser']==true)
? isset($options['anonymiser_variable']) ? $options['anonymiser_variable'] : ''
: '';
// Si multiple = non mais que c'est modifiable, alors on va chercher
// la dernière réponse si elle existe
if ($options
and !$options['multiple']
and $options['modifiable']
and $reponses = formidable_verifier_reponse_formulaire($formulaire['id_formulaire'], $options['identification'], $anonymisation)
) {
$id_formulaires_reponse = array_pop($reponses);
$contexte = formidable_definir_contexte_avec_reponse($contexte, $id_formulaires_reponse, $ok);
}
}
} else {
$contexte['editable'] = false;
$contexte['message_erreur'] = _T('formidable:erreur_inexistant');
}
if (!isset($contexte['_hidden'])) {
$contexte['_hidden'] = '';
// le formulaire a déjà été répondu.
// peut être faut il afficher les statistiques des réponses
if ($formulaire['apres']=='stats') {
// Nous sommes face à un sondage auquel on a déjà répondu !
// On remplace complètement l'affichage du formulaire
// par un affichage du résultat de sondage !
$contexte['_remplacer_formulaire'] = recuperer_fond('modeles/formulaire_analyse', array(
'id_formulaire' => $formulaire['id_formulaire'],
));
} else {
$contexte['message_erreur'] = _T('formidable:traiter_enregistrement_erreur_deja_repondu');
}
}
$contexte['_hidden'] .= "\n" . '<input type="hidden" name="formidable_afficher_apres' /*.$formulaire['id_formulaire']*/ . '" value="' . $formulaire['apres'] . '"/>'; // marche pas
} else {
$contexte['editable'] = false;
$contexte['message_erreur'] = _T('formidable:erreur_inexistant');
}
if (!isset($contexte['_hidden'])) {
$contexte['_hidden'] = '';
}
$contexte['_hidden'] .= "\n" . '<input type="hidden" name="formidable_afficher_apres' /*.$formulaire['id_formulaire']*/ . '" value="' . $formulaire['apres'] . '"/>'; // marche pas
$contexte['formidable_afficher_apres'] = $formulaire['apres'];
$contexte['formidable_afficher_apres'] = $formulaire['apres'];
return $contexte;
return $contexte;
}
/**
* Vérification du formulaire CVT de Formidable.
*
* Pour chaque champ posté, effectue les vérifications demandées par
* les saisies et retourne éventuellement les erreurs de saisie.
*
* @param int|string $id
* Identifiant numerique ou textuel du formulaire formidable
* @param array $valeurs
* Valeurs par défauts passées au contexte du formulaire
* Exemple : array('hidden_1' => 3) pour que champ identifie "@hidden_1@" soit prerempli
* @param int|bool $id_formulaires_reponse
* Identifiant d'une réponse pour forcer la reedition de cette reponse spécifique
*
* @return array
* Tableau des erreurs
**/
* Vérification du formulaire CVT de Formidable.
*
* Pour chaque champ posté, effectue les vérifications demandées par
* les saisies et retourne éventuellement les erreurs de saisie.
*
* @param int|string $id
* Identifiant numerique ou textuel du formulaire formidable
* @param array $valeurs
* Valeurs par défauts passées au contexte du formulaire
* Exemple : array('hidden_1' => 3) pour que champ identifie "@hidden_1@" soit prerempli
* @param int|bool $id_formulaires_reponse
* Identifiant d'une réponse pour forcer la reedition de cette reponse spécifique
*
* @return array
* Tableau des erreurs
**/
function formulaires_formidable_verifier($id, $valeurs = array(), $id_formulaires_reponse = false) {
$erreurs = array();
$erreurs = array();
// On peut donner soit un id soit un identifiant
if (!$id_formulaire = formidable_id_formulaire($id)) {
$erreurs['message_erreur'] = _T('formidable:erreur_base');
} else {
// Sale bête !
if (_request('mechantrobot')!='') {
$erreurs['hahahaha'] = 'hahahaha';
return $erreurs;
}
// On peut donner soit un id soit un identifiant
if (!$id_formulaire = formidable_id_formulaire($id)) {
$erreurs['message_erreur'] = _T('formidable:erreur_base');
} else {
// Sale bête !
if (_request('mechantrobot')!='') {
$erreurs['hahahaha'] = 'hahahaha';
return $erreurs;
}
$formulaire = sql_fetsel('*', 'spip_formulaires', 'id_formulaire = ' . intval($id_formulaire));
$saisies = unserialize($formulaire['saisies']);
$formulaire = sql_fetsel('*', 'spip_formulaires', 'id_formulaire = ' . intval($id_formulaire));
$saisies = unserialize($formulaire['saisies']);
$erreurs_par_fichier = array();
$erreurs = saisies_verifier($saisies,true,$erreurs_par_fichier);
$erreurs = saisies_verifier($saisies);
// On supprime de $_FILES les fichiers envoyés qui ne passent pas le test de vérification
//$infos_plugins = charger_fonction('infos_plugins','plugins');
$plugins_actifs = liste_plugin_actifs();
if (isset($plugins_actifs['CVTUPLOAD'])) {
include_spip('inc/cvtupload');
foreach ($erreurs as $champ => $erreur) {
cvtupload_nettoyer_files_selon_erreurs($champ, $erreurs_par_fichier[$champ]);
}
}
// Si on a pas déjà une erreur sur le champ unicite, on lance une verification
if ($formulaire['unicite'] != '') {
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter