Browse Source

Ticket #3914 : Pour le calcul de la date dans les formulaires de datages, éviter différents problèmes :

- lorsqu'on saisit une date inexistante (31/02/2017), retourner une erreur, plutôt que d'arbitrairement calculer une date sur le mois suivant avec les jours en trop
- lorsqu'on saisit une heure erronée (25:00 ou 12:78), retourner une erreur également, sinon l'enregistrement SQL echoue ensuite.
- il manquait les chaînes de langues des erreurs, depuis l'introduction de ce formulaire en r16420
svn/root/tags/spip-3.2.0-beta
Matthieu Marcillaud 6 years ago
parent
commit
c467a93575
  1. 2
      ecrire/lang/spip_fr.php
  2. 19
      prive/formulaires/dater.php

2
ecrire/lang/spip_fr.php

@ -288,6 +288,8 @@ le site "@nom_site_spip@" (@adresse_login@) :',
'form_prop_non_enregistre' => 'Votre proposition n’a pas été enregistrée.',
'form_prop_sujet' => 'Sujet',
'form_prop_url_site' => 'Adresse URL du site',
'format_date_incorrecte' => 'La date ou son format est incorrect',
'format_heure_incorrecte' => 'L’heure ou son format est incorrect',
'forum_non_inscrit' => 'Vous n’êtes pas inscrit, ou l’adresse ou le mot de passe sont erronés.',
'forum_par_auteur' => 'par @auteur@',
'forum_titre_erreur' => 'Erreur...',

19
prive/formulaires/dater.php

@ -318,11 +318,11 @@ function formulaires_dater_traiter_dist($objet, $id_objet, $retour = '', $option
}
/**
* Récupérer annee,mois,jour sur la date saisie
* Récupérer annee, mois, jour sur la date saisie
*
* @param string $post
* @param string $quoi
* @return array
* @return array|string Chaîne vide si date invalide, tableau (année, mois, jour) sinon.
*/
function dater_recuperer_date_saisie($post, $quoi = 'date') {
if (!preg_match('#^(?:(?:([0-9]{1,2})[/-])?([0-9]{1,2})[/-])?([0-9]{4}|[0-9]{1,2})#', $post, $regs)) {
@ -335,13 +335,13 @@ function dater_recuperer_date_saisie($post, $quoi = 'date') {
return array($regs[3], $regs[2], $regs[1]);
} else {
$t = mktime(0, 0, 0, $regs[2], $regs[1], $regs[3]);
// si la date n'est pas valide selon mktime, la refuser
if (!$t) {
return '';
if (
checkdate(intval($regs[2]), intval($regs[1]), intval($regs[3]))
and $t = mktime(0, 0, 0, $regs[2], $regs[1], $regs[3])
) {
return array(date('Y', $t), date('m', $t), date('d', $t));
}
return array(date('Y', $t), date('m', $t), date('d', $t));
return '';
}
}
@ -355,6 +355,9 @@ function dater_recuperer_heure_saisie($post) {
if (!preg_match('#([0-9]{1,2})(?:[h:](?:([0-9]{1,2}))?)?#', $post, $regs)) {
return '';
}
if ($regs[1] >= 23 or $regs[2] >= 59) {
return '';
}
return array($regs[1], $regs[2]);
}

Loading…
Cancel
Save