Changeset 7743 in spip-zone


Ignore:
Timestamp:
Dec 4, 2006, 11:13:33 AM (12 years ago)
Author:
fil@…
Message:

restitution du commit r7760 post-crash (Fil)
resoud le bug des crayons sur les donnees de forms, lorsqu'un champ est
+obligatoire

Location:
_plugins_/_stable_/forms/forms_et_tables_1_9_1/inc
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/_stable_/forms/forms_et_tables_1_9_1/inc/forms.php

    r7728 r7743  
    386386                include_spip("inc/forms_type_champs");
    387387               
    388                 // NOTE ici il y a un bug: la presence d'un champ obligatoire
    389                 // dans la structure interdit de *modifier* un autre champ, donc
    390                 // interdit aux widgets de fonctionner partout...
    391                 $erreur = Forms_valide_champs_reponse_post($id_form, $c, $structure);
     388                $erreur = Forms_valide_conformite_champs_reponse_post($id_form, $c, $structure);
    392389                if (!$erreur) {
    393390                        $champs_mod = array();
  • _plugins_/_stable_/forms/forms_et_tables_1_9_1/inc/forms_type_champs.php

    r7725 r7743  
    7979                return ($s = $noms[$type]) ? $s : $type;
    8080        }
    81        
     81
    8282        function Forms_valide_champs_reponse_post($id_form, $c = NULL, $structure = NULL){
    83                 $erreur = '';
     83                $erreur = array();
    8484                if (!$structure){
    8585                        include_spip("inc/forms");
     
    8888                foreach($structure as $champ=>$infos){
    8989                        $type = $infos['type'];
    90                         if (!$c)
    91                                 $val = _request($champ);
    92                         else
    93                                 $val = isset($c[$champ])?$c[$champ]:NULL;
     90                        $val = _request($champ, $c);
    9491
     92                        // verifier la presence des champs obligatoires
    9593                        if (!$val || ($type == 'fichier' && !$_FILES[$champ]['tmp_name'])) {
    9694                                if ($infos['obligatoire'] == 'oui')
     
    9896                                continue;
    9997                        }
    100                         // Verifier la conformite des donnees entrees
    101                         if ($type == 'date') {
    102                                 if (!preg_match("#^\s*([0-9]{1,2})/([0-9]{1,2})/([0-9]{2,4})\s*$#",$val,$regs)) {
     98                }
     99
     100                $erreur = array_merge($erreur,
     101                        Forms_valide_conformite_champs_reponse_post($id_form, $c, $structure));
     102
     103                return $erreur;
     104        }
     105
     106
     107        function Forms_valide_conformite_champs_reponse_post($id_form, $c = NULL, $structure = NULL){
     108                $erreur = array();
     109                if (!$structure){
     110                        include_spip("inc/forms");
     111                        $structure = Forms_structure($id_form);
     112                }
     113                foreach($structure as $champ=>$infos){
     114                        $type = $infos['type'];
     115                        if (NULL !== ($val = _request($champ, $c))) {
     116
     117                                // Verifier la conformite des donnees entrees
     118                                if ($type == 'date') {
     119                                        if (!preg_match("#^\s*([0-9]{1,2})/([0-9]{1,2})/([0-9]{2,4})\s*$#",$val,$regs)) {
    103120                                        $erreur[$champ] = _T("forms:date_invalide");
     121                                        }
     122                                        else
     123                                                if (!mktime(0,0,0,$reg[1],$regs[0],$regs[2]))
     124                                                        $erreur[$champ] = _T("forms:date_invalide");
    104125                                }
    105                                 else
    106                                         if (!mktime(0,0,0,$reg[1],$regs[0],$regs[2]))
    107                                                 $erreur[$champ] = _T("forms:date_invalide");
    108                         }
    109                         // Verifier la conformite des donnees entrees
    110                         if ($type == 'email') {
    111                                 include_spip('inc/filtres');
    112                                 if (!strpos($val, '@') || !email_valide($val)) {
    113                                         $erreur[$champ] = _T("forms:adresse_invalide");
    114                                 }
    115                         }
    116                         if ($type == 'url') {
    117                                 if ($row['extra_info'] == 'oui') {
    118                                         include_spip("inc/sites");
    119                                         if (!recuperer_page($val)) {
    120                                                 $erreur[$champ] = _T("forms:site_introuvable");
     126                                // Verifier la conformite des donnees entrees
     127                                if ($type == 'email') {
     128                                        include_spip('inc/filtres');
     129                                        if (!strpos($val, '@') || !email_valide($val)) {
     130                                                $erreur[$champ] = _T("forms:adresse_invalide");
    121131                                        }
    122132                                }
    123                         }
    124                         if ($type == 'fichier') {
    125                                 if (!$taille = $_FILES[$champ]['size']) {
    126                                         $erreur[$champ] = _T("forms:echec_upload");
     133                                if ($type == 'url') {
     134                                        if ($row['extra_info'] == 'oui') {
     135                                                include_spip("inc/sites");
     136                                                if (!recuperer_page($val)) {
     137                                                        $erreur[$champ] = _T("forms:site_introuvable");
     138                                                }
     139                                        }
    127140                                }
    128                                 else if ($row['extra_info'] && $taille > ($row['extra_info'] * 1024)) {
     141                                if ($type == 'fichier') {
     142                                        if (!$taille = $_FILES[$champ]['size']) {
     143                                                $erreur[$champ] = _T("forms:echec_upload");
     144                                        }
     145                                        else if ($row['extra_info'] && $taille > ($row['extra_info'] * 1024)) {
    129146                                        $erreur[$champ] = _T("forms:fichier_trop_gros");
     147                                        }
     148                                        else if (!Forms_type_fichier_autorise($_FILES[$champ]['name'])) {
     149                                                $erreur[$champ] = _T("fichier_type_interdit");
     150                                        }
     151                                        if ($erreur[$champ]) {
     152                                                supprimer_fichier($_FILES[$champ]['tmp_name']);
     153                                        }
    130154                                }
    131                                 else if (!Forms_type_fichier_autorise($_FILES[$champ]['name'])) {
    132                                         $erreur[$champ] = _T("fichier_type_interdit");
     155                                if ($type=='select' or $type=='mot')
     156                                        if (!isset($infos['choix'][$val]))
     157                                                $erreur[$champ] = _T("forms:donnee_inattendue");
     158                                if ($type=='multiple')
     159                                        foreach($val as $v)
     160                                                if (!isset($infos['choix'][$v]))
     161                                                        $erreur[$champ] = _T("forms:donnee_inattendue");
     162                                if (isset($GLOBALS['forms_types_champs_etendus'][$type])){
     163                                        $match = $GLOBALS['forms_types_champs_etendus'][$type]['match'];
     164                                        if (strlen($match) && !preg_match($match,$val))
     165                                                $erreur[$champ] = _T("forms:champs_perso_invalide");
    133166                                }
    134                                 if ($erreur[$champ]) {
    135                                         supprimer_fichier($_FILES[$champ]['tmp_name']);
    136                                 }
    137                         }
    138                         if ($type=='select' or $type=='mot')
    139                                 if (!isset($infos['choix'][$val]))
    140                                         $erreur[$champ] = _T("forms:donnee_inattendue");
    141                         if ($type=='multiple')
    142                                 foreach($val as $v)
    143                                         if (!isset($infos['choix'][$v]))
    144                                                 $erreur[$champ] = _T("forms:donnee_inattendue");
    145                         if (isset($GLOBALS['forms_types_champs_etendus'][$type])){
    146                                 $match = $GLOBALS['forms_types_champs_etendus'][$type]['match'];
    147                                 if (strlen($match) && !preg_match($match,$val))
    148                                         $erreur[$champ] = _T("forms:champs_perso_invalide");
    149167                        }
    150168                }
     
    152170        }
    153171
     172
    154173?>
Note: See TracChangeset for help on using the changeset viewer.