Overview
Comment:Restreindre les dates acceptées dans les champs persos
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA1: 0c2ea2638ca16e477ea5f26e07fd2b5de0eadfa2
User & Date: bohwaz on 2014-04-12 00:41:30
Other Links: manifest | tags
Context
2014-04-12
01:03
Amélioration ergonomique des champs date pour les navigateurs qui ne gèrent pas le type date : on peut entrer la date au format dd/mm/YYYY check-in: e879dc5feb user: bohwaz tags: trunk
00:41
Restreindre les dates acceptées dans les champs persos check-in: 0c2ea2638c user: bohwaz tags: trunk
00:40
Plugin système vide par défaut check-in: e1f6095884 user: bohwaz tags: trunk
Changes

Modified src/include/class.membres.php from [db8b6f595c] to [7f657564b8].

   299    299                   {
   300    300                       throw new UserException('Adresse e-mail invalide dans le champ "' . $config['title'] . '".');
   301    301                   }
   302    302                   elseif ($config['type'] == 'url' && trim($data[$key]) !== '' && !filter_var($data[$key], FILTER_VALIDATE_URL))
   303    303                   {
   304    304                       throw new UserException('Adresse URL invalide dans le champ "' . $config['title'] . '".');
   305    305                   }
          306  +                elseif ($config['type'] == 'date' && trim($data[$key]) !== '' && !utils::checkDate($data[$key]))
          307  +                {
          308  +                    throw new UserException('Date invalide "' . $config['title'] . '", format attendu : AAAA-MM-JJ.');
          309  +                }
          310  +                elseif ($config['type'] == 'datetime' && trim($data[$key]) !== '')
          311  +                {
          312  +                    if (!utils::checkDateTime($data[$key]) || !($dt = new DateTime($data[$key])))
          313  +                    {
          314  +                        throw new UserException('Date invalide "' . $config['title'] . '", format attendu : AAAA-MM-JJ HH:mm.');
          315  +                    }
          316  +
          317  +                    $data[$key] = $dt->format('Y-m-d H:i');
          318  +                }
   306    319                   elseif ($config['type'] == 'tel')
   307    320                   {
   308    321                       $data[$key] = utils::normalizePhoneNumber($data[$key]);
   309    322                   }
   310    323                   elseif ($config['type'] == 'country')
   311    324                   {
   312    325                       $data[$key] = strtoupper(substr($data[$key], 0, 2));
................................................................................
   433    446   
   434    447               // Si on ne vérifie pas toutes les tables qui sont liées ici à un ID de membre
   435    448               // la requête de modification provoquera une erreur de contrainte de foreign key
   436    449               // ce qui est normal. Donc : il n'est pas possible de changer l'ID d'un membre qui
   437    450               // a participé au wiki, à la compta, etc.
   438    451               if ($db->simpleQuerySingle('SELECT 1 FROM wiki_revisions WHERE id_auteur = ?;', false, (int)$id)
   439    452                   || $db->simpleQuerySingle('SELECT 1 FROM compta_journal WHERE id_auteur = ?;', false, (int)$id))
   440         -            #|| $db->simpleQuerySingle('SELECT 1 FROM wiki_suivi WHERE id_membre = ?;', false, (int)$id))
          453  +            # FIXME || $db->simpleQuerySingle('SELECT 1 FROM wiki_suivi WHERE id_membre = ?;', false, (int)$id))
   441    454               {
   442    455                   throw new UserException('Le numéro n\'est pas modifiable pour ce membre car des contenus sont liés à ce numéro de membre (wiki, compta, etc.).');
   443    456               }
   444    457           }
   445    458   
   446    459           if (!empty($data['passe']) && trim($data['passe']))
   447    460           {

Modified src/include/lib.template.php from [29cd731071] to [5bb0e07573].

   390    390       }
   391    391       elseif ($type == 'country')
   392    392       {
   393    393           $type = 'select';
   394    394           $config['options'] = utils::getCountryList();
   395    395           $params['default'] = Config::getInstance()->get('pays');
   396    396       }
          397  +    elseif ($type == 'date')
          398  +    {
          399  +        $params['pattern'] = '\d{4}-\d{2}-\d{2}';
          400  +    }
   397    401       elseif ($type == 'multiple')
   398    402       {
   399    403           if (empty($config['options']))
   400    404               throw new \BadFunctionCallException('Paramètre options obligatoire pour champ de type multiple.');
   401    405       }
   402    406   
   403    407       $field = '';

Modified src/include/lib.utils.php from [6668e725cc] to [6a6471aec6].

    41     41           $date = strtolower($date);
    42     42           return $date;
    43     43       }
    44     44   
    45     45       static public function sqliteDateToFrench($d, $short = false)
    46     46       {
    47     47           if (strlen($d) == 10 || $short)
    48         -            return \DateTime::createFromFormat('Y-m-d', substr($d, 0, 10))->format('d/m/Y');
           48  +        {
           49  +            $d = substr($d, 0, 10);
           50  +            $f = 'Y-m-d';
           51  +            $f2 = 'd/m/Y';
           52  +        }
    49     53           elseif (strlen($d) == 16)
    50         -            return \DateTime::createFromFormat('Y-m-d H:i', $d)->format('d/m/Y H:i');
           54  +        {
           55  +            $f = 'Y-m-d H:i';
           56  +            $f2 = 'd/m/Y H:i';
           57  +        }
           58  +        else
           59  +        {
           60  +            $f = 'Y-m-d H:i:s';
           61  +            $f2 = 'd/m/Y H:i';
           62  +        }
           63  +        
           64  +        if ($dt = \DateTime::createFromFormat($f, $d))
           65  +            return $dt->format($f2);
    51     66           else
    52         -            return \DateTime::createFromFormat('Y-m-d H:i:s', $d)->format('d/m/Y H:i');
           67  +            return $d;
    53     68       }
    54     69   
    55     70       static public function makeTimestampFromForm($d)
    56     71       {
    57     72           return mktime($d['h'], $d['min'], 0, $d['m'], $d['d'], $d['y']);
    58     73       }
    59     74   
................................................................................
    73     88               return false;
    74     89   
    75     90           return true;
    76     91       }
    77     92   
    78     93       static public function checkDateTime($str)
    79     94       {
    80         -        if (!preg_match('!^(\d{4}-\d{2}-\d{2}) (\d{2}):(\d{2})(?::(\d{2}))?$!', $str, $match))
           95  +        if (!preg_match('!^(\d{4}-\d{2}-\d{2})[T ](\d{2}):(\d{2})!', $str, $match))
    81     96               return false;
    82     97   
    83     98           if (!self::checkDate($match[1]))
    84     99               return false;
    85    100   
    86    101           if ((int) $match[2] < 0 || (int) $match[2] > 23)
    87    102               return false;