[annulée]Prop0062 - Corriger sur les formulaires la vérification des dates obligatoires

Porteur principal : Laurent Groleau

Porteur secondaire : ?

Résumé

Sur OM4.9, en modification d’un formulaire, les dates ‘not null’ ne sont pas vérifiées, et on peut provoquer une erreur SQL peu compréhensible à l’utilisateur.

P.S. : problème non reproduit sur le framework 4.9.2 … on constate seulement que la date vide n’est pas postée, pas vérifiée et reste inchangée.

Motivation

Eviter une erreur SQL qui est prévenue pour les autre types de champs.

Pré-requis

Obtenir la validation d’un développeur-souche.

Proposition et implémentation

Dans la classe dbform, la méthode checkRequired() , en contexte de modification ($crud = 'update'), vérifie que les champs du formulaire (tableau posté $this->valF) ont bien une valeur non vide. Hors l’utilisation de la fonction isset() est inapproprié pour les dates :

  • une date non renseignée est postée comme un élément existant mais vide "date_formulaire" => null
  • isset() renvoi alors false, ce qui désactive le contrôle, comme dans le cas où on aurait volontairement supprimé le champ du formulaire avec unset()
  • le code continue donc et le SQL échoue pour violation de contrainte

La proposition est de remplacer le test de blocage actuel:

elseif (($crud === 'update' OR ($crud === null AND $this->getParameter('maj') == 1))
     &&isset($this->valF[$field])
     &&$this->valF[$field] === '') {

par celui-ci:

elseif (($crud === 'update' OR ($crud === null AND $this->getParameter('maj') == 1))
     &&array_key_exists($field, $this->valF)
     &&(is_null($this->valF[$field]) || $this->valF[$field] === '') {

Risques

Régression sur un autre type de champ, mais apparemment pas sur un text ou un select.