LSform :: validate: add $onlyIfPresent parameter

This parameter permit to handle only data of present element in POST 
data. Other element are not considered in the form.
This commit is contained in:
Benjamin Renard 2020-05-08 20:48:13 +02:00
parent 3d9c11e12f
commit a356555e0a
11 changed files with 76 additions and 31 deletions

View file

@ -307,17 +307,19 @@ class LSform {
} }
/** /**
* Verifie si le formulaire a été validé et que les données sont valides. * Check form is submited and its data are validat
* *
* @param[in] $onlyIfPresent boolean If true and data of this element is not present in POST data,
* just ignore it.
* @author Benjamin Renard <brenard@easter-eggs.com> * @author Benjamin Renard <brenard@easter-eggs.com>
* *
* @retval boolean true si le formulaire a été validé et que les données ont été validées, false sinon * @retval boolean true if form is submited and its data are valid, false otherwise
*/ */
public function validate(){ public function validate($onlyIfPresent=false){
if(!$this -> can_validate) if(!$this -> can_validate)
return; return;
if ($this -> isSubmit()) { if ($this -> isSubmit()) {
if (!$this -> getPostData()) { if (!$this -> getPostData($onlyIfPresent)) {
LSerror :: addErrorCode('LSform_01'); LSerror :: addErrorCode('LSform_01');
return; return;
} }
@ -436,16 +438,18 @@ class LSform {
} }
/** /**
* Récupère les valeurs postées dans le formulaire * Retreive POST data of the form
* *
* @param[in] $onlyIfPresent boolean If true and data of this element is not present in POST data,
* just ignore it.
* @author Benjamin Renard <brenard@easter-eggs.com> * @author Benjamin Renard <brenard@easter-eggs.com>
* *
* @retval boolean true si les valeurs ont bien été récupérées, false sinon. * @retval boolean true if POST data are retreived, false otherwise
*/ */
public function getPostData() { public function getPostData($onlyIfPresent=false) {
if (is_null($this -> dataEntryForm)) { if (is_null($this -> dataEntryForm)) {
foreach($this -> elements as $element_name => $element) { foreach($this -> elements as $element_name => $element) {
if( !($element -> getPostData($this -> _postData)) ) { if( !($element -> getPostData($this -> _postData, $onlyIfPresent)) ) {
LSerror :: addErrorCode('LSform_02',$element_name); LSerror :: addErrorCode('LSform_02',$element_name);
return; return;
} }
@ -467,7 +471,7 @@ class LSform {
if ((isset($this -> dataEntryFormConfig['requiredAllAttributes']) && $this -> dataEntryFormConfig['requiredAllAttributes']) || isset($this -> dataEntryFormConfig['requiredAttributes']) && is_array($this -> dataEntryFormConfig['requiredAttributes']) && in_array($elementName,$this -> dataEntryFormConfig['requiredAttributes'])) { if ((isset($this -> dataEntryFormConfig['requiredAllAttributes']) && $this -> dataEntryFormConfig['requiredAllAttributes']) || isset($this -> dataEntryFormConfig['requiredAttributes']) && is_array($this -> dataEntryFormConfig['requiredAttributes']) && in_array($elementName,$this -> dataEntryFormConfig['requiredAttributes'])) {
$element -> setRequired(); $element -> setRequired();
} }
if( !($element -> getPostData($this -> _postData)) ) { if( !($element -> getPostData($this -> _postData, $onlyIfPresent)) ) {
LSerror :: addErrorCode('LSform_02',$element_name); LSerror :: addErrorCode('LSform_02',$element_name);
return; return;
} }

View file

@ -210,11 +210,13 @@ class LSformElement extends LSlog_staticLoggerClass {
* Cette méthode vérifie la présence en POST de la valeur de l'élément et la récupère * Cette méthode vérifie la présence en POST de la valeur de l'élément et la récupère
* pour la mettre dans le tableau passer en paramètre avec en clef le nom de l'élément * pour la mettre dans le tableau passer en paramètre avec en clef le nom de l'élément
* *
* @param[] array Pointeur sur le tableau qui recupèrera la valeur. * @param[in] &$return array Reference of the array for retreived values
* @param[in] $onlyIfPresent boolean If true and data of this element is not present in POST data,
* just ignore it.
* *
* @retval boolean true si la valeur est présente en POST, false sinon * @retval boolean true si la valeur est présente en POST, false sinon
*/ */
public function getPostData(&$return) { public function getPostData(&$return, $onlyIfPresent=false) {
if($this -> isFreeze()) { if($this -> isFreeze()) {
return true; return true;
} }
@ -230,6 +232,10 @@ class LSformElement extends LSlog_staticLoggerClass {
} }
return true; return true;
} }
elseif ($onlyIfPresent) {
self :: log_debug($this -> name.": not in POST data => ignore it");
return true;
}
else { else {
$return[$this -> name] = array(); $return[$this -> name] = array();
return true; return true;

View file

@ -86,11 +86,13 @@ class LSformElement_image extends LSformElement {
* Cette méthode vérifie la présence en POST de la valeur de l'élément et la récupère * Cette méthode vérifie la présence en POST de la valeur de l'élément et la récupère
* pour la mettre dans le tableau passer en paramètre avec en clef le nom de l'élément * pour la mettre dans le tableau passer en paramètre avec en clef le nom de l'élément
* *
* @param[] array Pointeur sur le tableau qui recupèrera la valeur. * @param[in] &$return array Reference of the array for retreived values
* @param[in] $onlyIfPresent boolean If true and data of this element is not present in POST data,
* just ignore it.
* *
* @retval boolean true si la valeur est présente en POST, false sinon * @retval boolean true si la valeur est présente en POST, false sinon
*/ */
public function getPostData(&$return) { public function getPostData(&$return, $onlyIfPresent=false) {
if($this -> isFreeze()) { if($this -> isFreeze()) {
return true; return true;
} }

View file

@ -215,11 +215,13 @@ class LSformElement_jsonCompositeAttribute extends LSformElement {
* This method check present of this element's value in POST data and retreive * This method check present of this element's value in POST data and retreive
* it to feed the array passed in paramater. * it to feed the array passed in paramater.
* *
* @param[] array Reference of the array for retreived values * @param[in] &$return array Reference of the array for retreived values
* @param[in] $onlyIfPresent boolean If true and data of this element is not present in POST data,
* just ignore it.
* *
* @retval boolean true if value is in POST data, false instead * @retval boolean true if value is in POST data, false instead
*/ */
public function getPostData(&$return) { public function getPostData(&$return, $onlyIfPresent=false) {
if($this -> isFreeze()) { if($this -> isFreeze()) {
return true; return true;
} }

View file

@ -95,11 +95,13 @@ class LSformElement_labeledValue extends LSformElement {
* Cette méthode vérifie la présence en POST de la valeur de l'élément et la récupère * Cette méthode vérifie la présence en POST de la valeur de l'élément et la récupère
* pour la mettre dans le tableau passer en paramètre avec en clef le nom de l'élément * pour la mettre dans le tableau passer en paramètre avec en clef le nom de l'élément
* *
* @param[] array Pointeur sur le tableau qui recupèrera la valeur. * @param[in] &$return array Reference of the array for retreived values
* @param[in] $onlyIfPresent boolean If true and data of this element is not present in POST data,
* just ignore it.
* *
* @retval boolean true si la valeur est présente en POST, false sinon * @retval boolean true si la valeur est présente en POST, false sinon
*/ */
public function getPostData(&$return) { public function getPostData(&$return, $onlyIfPresent=false) {
if($this -> isFreeze()) { if($this -> isFreeze()) {
return true; return true;
} }
@ -119,6 +121,10 @@ class LSformElement_labeledValue extends LSformElement {
} }
return true; return true;
} }
elseif ($onlyIfPresent) {
self :: log_debug($this -> name.": not in POST data => ignore it");
return true;
}
else { else {
$return[$this -> name] = array(); $return[$this -> name] = array();
return true; return true;

View file

@ -123,11 +123,13 @@ class LSformElement_mailQuota extends LSformElement {
* Cette méthode vérifie la présence en POST de la valeur de l'élément et la récupère * Cette méthode vérifie la présence en POST de la valeur de l'élément et la récupère
* pour la mettre dans le tableau passer en paramètre avec en clef le nom de l'élément * pour la mettre dans le tableau passer en paramètre avec en clef le nom de l'élément
* *
* @param[] array Pointeur sur le tableau qui recupèrera la valeur. * @param[in] &$return array Reference of the array for retreived values
* @param[in] $onlyIfPresent boolean If true and data of this element is not present in POST data,
* just ignore it.
* *
* @retval boolean true si la valeur est présente en POST, false sinon * @retval boolean true si la valeur est présente en POST, false sinon
*/ */
public function getPostData(&$return) { public function getPostData(&$return, $onlyIfPresent=false) {
if($this -> isFreeze()) { if($this -> isFreeze()) {
return true; return true;
} }
@ -155,6 +157,10 @@ class LSformElement_mailQuota extends LSformElement {
$return[$this -> name]=$_POST[$this -> name]; $return[$this -> name]=$_POST[$this -> name];
return true; return true;
} }
elseif ($onlyIfPresent) {
self :: log_debug($this -> name.": not in POST data => ignore it");
return true;
}
else { else {
$return[$this -> name] = array(); $return[$this -> name] = array();
return true; return true;

View file

@ -78,11 +78,13 @@ class LSformElement_maildir extends LSformElement_text {
* Cette méthode vérifie la présence en POST de la valeur de l'élément et la récupère * Cette méthode vérifie la présence en POST de la valeur de l'élément et la récupère
* pour la mettre dans le tableau passer en paramètre avec en clef le nom de l'élément * pour la mettre dans le tableau passer en paramètre avec en clef le nom de l'élément
* *
* @param[] array Pointeur sur le tableau qui recupèrera la valeur. * @param[in] &$return array Reference of the array for retreived values
* @param[in] $onlyIfPresent boolean If true and data of this element is not present in POST data,
* just ignore it.
* *
* @retval boolean true si la valeur est présente en POST, false sinon * @retval boolean true si la valeur est présente en POST, false sinon
*/ */
public function getPostData(&$return) { public function getPostData(&$return, $onlyIfPresent=false) {
// Récupère la valeur dans _POST, et les vérifie avec la fonction générale // Récupère la valeur dans _POST, et les vérifie avec la fonction générale
$retval = parent :: getPostData($return); $retval = parent :: getPostData($return);

View file

@ -44,13 +44,15 @@ class LSformElement_password extends LSformElement {
* Cette méthode vérifie la présence en POST de la valeur de l'élément et la récupère * Cette méthode vérifie la présence en POST de la valeur de l'élément et la récupère
* pour la mettre dans le tableau passer en paramètre avec en clef le nom de l'élément * pour la mettre dans le tableau passer en paramètre avec en clef le nom de l'élément
* *
* @param[] array Pointeur sur le tableau qui recupèrera la valeur. * @param[in] &$return array Reference of the array for retreived values
* @param[in] $onlyIfPresent boolean If true and data of this element is not present in POST data,
* just ignore it.
* *
* @retval boolean true si la valeur est présente en POST, false sinon * @retval boolean true si la valeur est présente en POST, false sinon
*/ */
public function getPostData(&$return) { public function getPostData(&$return, $onlyIfPresent=false) {
// Récupère la valeur dans _POST, et les vérifie avec la fonction générale // Récupère la valeur dans _POST, et les vérifie avec la fonction générale
$retval = parent :: getPostData($return); $retval = parent :: getPostData($return, $onlyIfPresent);
// Si une valeur est recupérée // Si une valeur est recupérée
if ($retval) { if ($retval) {
$val = $this -> form -> ldapObject -> attrs[$this -> name] -> getValue(); $val = $this -> form -> ldapObject -> attrs[$this -> name] -> getValue();

View file

@ -114,11 +114,13 @@ class LSformElement_quota extends LSformElement {
* Cette méthode vérifie la présence en POST de la valeur de l'élément et la récupère * Cette méthode vérifie la présence en POST de la valeur de l'élément et la récupère
* pour la mettre dans le tableau passer en paramètre avec en clef le nom de l'élément * pour la mettre dans le tableau passer en paramètre avec en clef le nom de l'élément
* *
* @param[] array Pointeur sur le tableau qui recupèrera la valeur. * @param[in] &$return array Reference of the array for retreived values
* @param[in] $onlyIfPresent boolean If true and data of this element is not present in POST data,
* just ignore it.
* *
* @retval boolean true si la valeur est présente en POST, false sinon * @retval boolean true si la valeur est présente en POST, false sinon
*/ */
public function getPostData(&$return) { public function getPostData(&$return, $onlyIfPresent=false) {
if($this -> isFreeze()) { if($this -> isFreeze()) {
return true; return true;
} }
@ -142,6 +144,10 @@ class LSformElement_quota extends LSformElement {
} }
return true; return true;
} }
elseif ($onlyIfPresent) {
self :: log_debug($this -> name.": not in POST data => ignore it");
return true;
}
else { else {
$return[$this -> name] = array(); $return[$this -> name] = array();
return true; return true;

View file

@ -168,11 +168,18 @@ class LSformElement_supannCompositeAttribute extends LSformElement {
* Cette méthode vérifie la présence en POST de la valeur de l'élément et la récupère * Cette méthode vérifie la présence en POST de la valeur de l'élément et la récupère
* pour la mettre dans le tableau passer en paramètre avec en clef le nom de l'élément * pour la mettre dans le tableau passer en paramètre avec en clef le nom de l'élément
* *
* @param[] array Pointeur sur le tableau qui recupèrera la valeur. * @param[in] &$return array Reference of the array for retreived values
* @param[in] $onlyIfPresent boolean If true and data of this element is not present in POST data,
* just ignore it.
* *
* @retval boolean true si la valeur est présente en POST, false sinon * @retval boolean true si la valeur est présente en POST, false sinon
*/ */
public function getPostData(&$return) { public function getPostData(&$return, $onlyIfPresent=false) {
if ($onlyIfPresent) {
self :: log_warning("getPostData : does not support \$onlyIfPresent mode => Post data ignored");
return true;
}
if($this -> isFreeze()) { if($this -> isFreeze()) {
return true; return true;
} }

View file

@ -143,11 +143,13 @@ class LSformElement_valueWithUnit extends LSformElement {
* Cette méthode vérifie la présence en POST de la valeur de l'élément et la récupère * Cette méthode vérifie la présence en POST de la valeur de l'élément et la récupère
* pour la mettre dans le tableau passer en paramètre avec en clef le nom de l'élément * pour la mettre dans le tableau passer en paramètre avec en clef le nom de l'élément
* *
* @param[] array Pointeur sur le tableau qui recupèrera la valeur. * @param[in] &$return array Reference of the array for retreived values
* @param[in] $onlyIfPresent boolean If true and data of this element is not present in POST data,
* just ignore it.
* *
* @retval boolean true si la valeur est présente en POST, false sinon * @retval boolean true si la valeur est présente en POST, false sinon
*/ */
public function getPostData(&$return) { public function getPostData(&$return, $onlyIfPresent=false) {
if($this -> isFreeze()) { if($this -> isFreeze()) {
return true; return true;
} }