From 2a5ca467fd1e8def10105366d4a224e3a1d248cc Mon Sep 17 00:00:00 2001 From: Guillaume Lajarige Date: Tue, 29 Mar 2016 12:33:08 +0000 Subject: [PATCH] Alpha 2.3.0 fixes : - Multiple request templates on portal - SelectField interface stabilization - UI fixes on portal - Forms updates on lifecycle SVN:trunk[3970] --- core/attributedef.class.inc.php | 4 +-- js/form_field.js | 15 +++++--- sources/autoload.php | 1 + .../field/multipleselectfield.class.inc.php | 35 +++++++++++++++++++ sources/form/field/selectfield.class.inc.php | 13 +++++++ .../bootstrap/bsformrenderer.class.inc.php | 2 ++ .../bssimplefieldrenderer.class.inc.php | 9 ++++- .../bssubformfieldrenderer.class.inc.php | 1 + 8 files changed, 73 insertions(+), 7 deletions(-) create mode 100644 sources/form/field/multipleselectfield.class.inc.php diff --git a/core/attributedef.class.inc.php b/core/attributedef.class.inc.php index 23f95c86f..95b86711a 100644 --- a/core/attributedef.class.inc.php +++ b/core/attributedef.class.inc.php @@ -6036,7 +6036,7 @@ class AttributeFriendlyName extends AttributeComputedFieldVoid return '\\Combodo\\iTop\\Form\\Field\\StringField'; } - public function GetFormField(DBObject $oObject, $oFormField = null) + public function MakeFormField(DBObject $oObject, $oFormField = null) { if ($oFormField === null) { @@ -6044,7 +6044,7 @@ class AttributeFriendlyName extends AttributeComputedFieldVoid $oFormField = new $sFormFieldClass($this->GetCode()); } $oFormField->SetReadOnly(true); - parent::GetFormField($oObject, $oFormField); + parent::MakeFormField($oObject, $oFormField); return $oFormField; } diff --git a/js/form_field.js b/js/form_field.js index 8eb68ab10..7fa6c6e92 100644 --- a/js/form_field.js +++ b/js/form_field.js @@ -84,10 +84,17 @@ $(function() } else if($(oElem).is('select')) { - value = []; - $(oElem).find('option:selected').each(function(){ - value.push($(this).val()); - }); + if($(oElem).is('select[multiple]')) + { + value = []; + $(oElem).find('option:selected').each(function(){ + value.push($(this).val()); + }); + } + else + { + value = $(oElem).val(); + } } else if($(oElem).is(':checkbox') || $(oElem).is(':radio')) { diff --git a/sources/autoload.php b/sources/autoload.php index f108cac02..952af34a0 100644 --- a/sources/autoload.php +++ b/sources/autoload.php @@ -31,6 +31,7 @@ require_once APPROOT . 'sources/form/field/stringfield.class.inc.php'; require_once APPROOT . 'sources/form/field/textareafield.class.inc.php'; require_once APPROOT . 'sources/form/field/multiplechoicesfield.class.inc.php'; require_once APPROOT . 'sources/form/field/selectfield.class.inc.php'; +require_once APPROOT . 'sources/form/field/multipleselectfield.class.inc.php'; require_once APPROOT . 'sources/form/field/selectobjectfield.class.inc.php'; require_once APPROOT . 'sources/form/field/checkboxfield.class.inc.php'; require_once APPROOT . 'sources/form/field/radiofield.class.inc.php'; diff --git a/sources/form/field/multipleselectfield.class.inc.php b/sources/form/field/multipleselectfield.class.inc.php new file mode 100644 index 000000000..5dda190c9 --- /dev/null +++ b/sources/form/field/multipleselectfield.class.inc.php @@ -0,0 +1,35 @@ + + +namespace Combodo\iTop\Form\Field; + +use \Closure; +use \Dict; +use \Combodo\iTop\Form\Field\SelectField; + +/** + * Description of MultipleSelectField + * + * @author Guillaume Lajarige + */ +class MultipleSelectField extends SelectField +{ + const DEFAULT_MULTIPLE_VALUES_ENABLED = true; + +} diff --git a/sources/form/field/selectfield.class.inc.php b/sources/form/field/selectfield.class.inc.php index 6afd5106d..7ae45f210 100644 --- a/sources/form/field/selectfield.class.inc.php +++ b/sources/form/field/selectfield.class.inc.php @@ -30,6 +30,7 @@ use \Combodo\iTop\Form\Field\MultipleChoicesField; */ class SelectField extends MultipleChoicesField { + const DEFAULT_MULTIPLE_VALUES_ENABLED = false; const DEFAULT_NULL_CHOICE_LABEL = 'UI:SelectOne'; const DEFAULT_STARTS_WITH_NULL_CHOICE = true; @@ -75,4 +76,16 @@ class SelectField extends MultipleChoicesField return $aChoices; } + /** + * Overloads the method to prevent changing this property. + * + * @param boolean $bMultipleValuesEnabled + * @return \Combodo\iTop\Form\Field\SelectField + */ + public function SetMultipleValuesEnabled($bMultipleValuesEnabled) + { + // We don't allow changing this value + return $this; + } + } diff --git a/sources/renderer/bootstrap/bsformrenderer.class.inc.php b/sources/renderer/bootstrap/bsformrenderer.class.inc.php index 37de5817a..7f71b8d60 100644 --- a/sources/renderer/bootstrap/bsformrenderer.class.inc.php +++ b/sources/renderer/bootstrap/bsformrenderer.class.inc.php @@ -44,9 +44,11 @@ class BsFormRenderer extends FormRenderer $this->AddSupportedField('StringField', 'BsSimpleFieldRenderer'); $this->AddSupportedField('TextAreaField', 'BsSimpleFieldRenderer'); $this->AddSupportedField('SelectField', 'BsSimpleFieldRenderer'); + $this->AddSupportedField('MultipleSelectField', 'BsSimpleFieldRenderer'); $this->AddSupportedField('RadioField', 'BsSimpleFieldRenderer'); $this->AddSupportedField('CheckboxField', 'BsSimpleFieldRenderer'); $this->AddSupportedField('SubFormField', 'BsSubFormFieldRenderer'); + $this->AddSupportedField('SelectObjectField', 'BsSimpleFieldRenderer'); } } diff --git a/sources/renderer/bootstrap/fieldrenderer/bssimplefieldrenderer.class.inc.php b/sources/renderer/bootstrap/fieldrenderer/bssimplefieldrenderer.class.inc.php index ef1360bdd..a59cd8550 100644 --- a/sources/renderer/bootstrap/fieldrenderer/bssimplefieldrenderer.class.inc.php +++ b/sources/renderer/bootstrap/fieldrenderer/bssimplefieldrenderer.class.inc.php @@ -92,6 +92,7 @@ EOF break; case 'Combodo\\iTop\\Form\\Field\\SelectField': + case 'Combodo\\iTop\\Form\\Field\\MultipleSelectField': $oOutput->AddHtml('
'); if ($this->oField->GetLabel() !== '') { @@ -187,7 +188,9 @@ EOF break; case 'Combodo\\iTop\\Form\\Field\\RadioField': - case 'Combodo\\iTop\\Form\\Field\\SelectField': // TODO : This should be check for external key, as we would display it differently + case 'Combodo\\iTop\\Form\\Field\\SelectField': + case 'Combodo\\iTop\\Form\\Field\\MultipleSelectField': + case 'Combodo\\iTop\\Form\\Field\\SelectObjectField': // TODO : This should be check for external key, as we would display it differently $aFieldChoices = $this->oField->GetChoices(); $sFieldValue = (isset($aFieldChoices[$this->oField->GetCurrentValue()])) ? $aFieldChoices[$this->oField->GetCurrentValue()] : Dict::S('UI:UndefinedObject'); @@ -214,6 +217,8 @@ EOF case 'Combodo\\iTop\\Form\\Field\\StringField': case 'Combodo\\iTop\\Form\\Field\\TextAreaField': case 'Combodo\\iTop\\Form\\Field\\SelectField': + case 'Combodo\\iTop\\Form\\Field\\MultipleSelectField': + case 'Combodo\\iTop\\Form\\Field\\SelectObjectField': case 'Combodo\\iTop\\Form\\Field\\HiddenField': $oOutput->AddJs( << $this->oField->GetForm()->GetFieldsImpacts(), 'form_path' => $this->oField->GetForm()->GetId() ); + $sFieldSetOptions = json_encode($aFieldSetOptions); $oOutput->AddJs( <<