mirror of
https://github.com/silverstripe/silverstripe-userforms.git
synced 2024-10-22 17:05:42 +02:00
MINOR FEATURE Not entirely clean, but this prevents conditional fields that are not visible, to be still required. But will only trigger a warning when visible.
This commit is contained in:
parent
9020ce82d0
commit
62f26f58e4
@ -455,14 +455,75 @@ class UserDefinedForm_Controller extends Page_Controller {
|
|||||||
if($this->Fields()) {
|
if($this->Fields()) {
|
||||||
foreach($this->Fields() as $field) {
|
foreach($this->Fields() as $field) {
|
||||||
$messages[$field->Name] = $field->getErrorMessage()->HTML();
|
$messages[$field->Name] = $field->getErrorMessage()->HTML();
|
||||||
|
/**
|
||||||
|
* Dependency defaults to a:0:{}
|
||||||
|
* So, escape it temporary solution, to have the custom rule not fubar the validation.
|
||||||
|
*
|
||||||
|
* @todo implement that will more gracefully drive the user nuts.
|
||||||
|
*/
|
||||||
if($field->Required) {
|
if($field->Required) {
|
||||||
|
if($field->CustomRules != 'a:0:{}'){
|
||||||
|
$Rules = unserialize($field->CustomRules);
|
||||||
|
foreach($Rules as $rule){
|
||||||
|
// is this field a special option field
|
||||||
|
$formFieldWatch = DataObject::get_one("EditableFormField", "\"Name\" = '".$rule['ConditionField']."'");
|
||||||
|
$checkboxField = false;
|
||||||
|
if(in_array($formFieldWatch->ClassName, array('EditableCheckboxGroupField', 'EditableCheckbox'))) {
|
||||||
|
$action = "click";
|
||||||
|
$checkboxField = true;
|
||||||
|
}
|
||||||
|
switch($rule['ConditionOption']) {
|
||||||
|
case 'IsNotBlank':
|
||||||
|
$expression = ($checkboxField) ? '$("#Form_Form_'.$rule['ConditionField'].'").attr("checked")' : '$("#Form_Form_'.$rule['ConditionField'].'").val() != ""';
|
||||||
|
|
||||||
|
break;
|
||||||
|
case 'IsBlank':
|
||||||
|
$expression = ($checkboxField) ? '!($("#Form_Form_'.$rule['ConditionField'].'").attr("checked"))' : '$("#Form_Form_'.$rule['ConditionField'].'").val() == ""';
|
||||||
|
|
||||||
|
break;
|
||||||
|
case 'HasValue':
|
||||||
|
$expression = ($checkboxField) ? '$("#Form_Form_'.$rule['ConditionField'].'").attr("checked")' : '$("#Form_Form_'.$rule['ConditionField'].'").val() == "'. $dependency['Value'] .'"';
|
||||||
|
|
||||||
|
break;
|
||||||
|
case 'ValueLessThan':
|
||||||
|
$expression = '$("#Form_Form_'.$rule['ConditionField'].'").val() < parseFloat("'. $dependency['Value'] .'")';
|
||||||
|
|
||||||
|
break;
|
||||||
|
case 'ValueLessThanEqual':
|
||||||
|
$expression = '$("#Form_Form_'.$rule['ConditionField'].'").val() <= parseFloat("'. $dependency['Value'] .'")';
|
||||||
|
|
||||||
|
break;
|
||||||
|
case 'ValueGreaterThan':
|
||||||
|
$expression = '$("#Form_Form_'.$rule['ConditionField'].'").val() > parseFloat("'. $dependency['Value'] .'")';
|
||||||
|
|
||||||
|
break;
|
||||||
|
case 'ValueGreaterThanEqual':
|
||||||
|
$expression = '$("#Form_Form_'.$rule['ConditionField'].'").val() >= parseFloat("'. $dependency['Value'] .'")';
|
||||||
|
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
$expression = ($checkboxField) ? '!($("#Form_Form_'.$rule['ConditionField'].'").attr("checked"))' : '$("#Form_Form_'.$rule['ConditionField'].'").val() != "'. $dependency['Value'] .'"';
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
$rules[$field->Name] = array_merge(
|
||||||
|
array(
|
||||||
|
'required' => 'function(element){ return ('. $expression .');}',
|
||||||
|
),
|
||||||
|
$field->getValidation()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
$rules[$field->Name] = array_merge(array('required' => true), $field->getValidation());
|
$rules[$field->Name] = array_merge(array('required' => true), $field->getValidation());
|
||||||
$required->addRequiredField($field->Name);
|
$required->addRequiredField($field->Name);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
else{
|
||||||
|
$field->Required = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set the Form Name
|
// Set the Form Name
|
||||||
$rules = $this->array2json($rules);
|
$rules = $this->array2json($rules);
|
||||||
$messages = $this->array2json($messages);
|
$messages = $this->array2json($messages);
|
||||||
@ -628,8 +689,13 @@ JS
|
|||||||
if(is_array( $value )) {
|
if(is_array( $value )) {
|
||||||
$result[] = "$key:" . $this->array2json($value);
|
$result[] = "$key:" . $this->array2json($value);
|
||||||
} else {
|
} else {
|
||||||
|
/**
|
||||||
|
* Little 'ugly' fix to skip functions to be quoted
|
||||||
|
*/
|
||||||
|
if(!(substr($value, 0, 8) == 'function')){
|
||||||
$value = (is_bool($value)) ? $value : "\"$value\"";
|
$value = (is_bool($value)) ? $value : "\"$value\"";
|
||||||
$result[] = "$key:$value";
|
}
|
||||||
|
$result[] = "$key:$value";
|
||||||
}
|
}
|
||||||
return (isset($result)) ? "{\n".implode( ', ', $result ) ."\n}\n": '{}';
|
return (isset($result)) ? "{\n".implode( ', ', $result ) ."\n}\n": '{}';
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user