diff --git a/datamodels/2.x/itop-portal-base/portal/src/Form/ObjectFormManager.php b/datamodels/2.x/itop-portal-base/portal/src/Form/ObjectFormManager.php index 0944c0bbd..3fac09f48 100644 --- a/datamodels/2.x/itop-portal-base/portal/src/Form/ObjectFormManager.php +++ b/datamodels/2.x/itop-portal-base/portal/src/Form/ObjectFormManager.php @@ -78,6 +78,12 @@ class ObjectFormManager extends FormManager protected $aFormProperties; /** @var array $aCallbackUrls */ protected $aCallbackUrls = array(); + /** + * List of hidden fields, used for form update (eg. remove them from the form regarding they dependencies) + * @var array $aHiddenFieldsId + * @since 2.7.5 + */ + protected $aHiddenFieldsId = array(); /** * Creates an instance of \Combodo\iTop\Portal\Form\ObjectFormManager from JSON data that must contain at least : @@ -941,6 +947,8 @@ class ObjectFormManager extends FormManager if($oField->GetHidden() === false) { $oForm->AddField($oField); + } else { + $this->aHiddenFieldsId[]=$oField->GetId(); } } @@ -1472,4 +1480,22 @@ class ObjectFormManager extends FormManager } return $oChangeOp; } + + /** + * @return array + * @since 2.7.5 + */ + public function GetHiddenFieldsId() + { + return $this->aHiddenFieldsId; + } + + /** + * @param array $aHiddenFieldsId + * @since 2.7.5 + */ + public function SetHiddenFieldsId($aHiddenFieldsId) + { + $this->aHiddenFieldsId = $aHiddenFieldsId; + } } diff --git a/datamodels/2.x/itop-portal-base/portal/src/Helper/ObjectFormHandlerHelper.php b/datamodels/2.x/itop-portal-base/portal/src/Helper/ObjectFormHandlerHelper.php index 62231c95f..d114b1b05 100644 --- a/datamodels/2.x/itop-portal-base/portal/src/Helper/ObjectFormHandlerHelper.php +++ b/datamodels/2.x/itop-portal-base/portal/src/Helper/ObjectFormHandlerHelper.php @@ -280,8 +280,8 @@ class ObjectFormHandlerHelper ->SetFormProperties($aFormProperties); $oFormManager->Build(); - - // Check the number of editable fields + $aFormData['hidden_fields'] = $oFormManager->GetHiddenFieldsId(); + // Check the number of editable fields $aFormData['editable_fields_count'] = $oFormManager->GetForm()->GetEditableFieldCount(); } else @@ -388,6 +388,7 @@ class ObjectFormHandlerHelper $aFormData['object_state'] = $oFormManager->GetObject()->GetState(); $aFormData['fieldset'] = $aFieldSetData; $aFormData['display_mode'] = (isset($aFormProperties['properties'])) ? $aFormProperties['properties']['display_mode'] : ApplicationHelper::FORM_DEFAULT_DISPLAY_MODE; + $aFormData['hidden_fields'] = $oFormManager->GetHiddenFieldsId(); // - Set a text to be copied on title if the object is not in creation if($sMode !== static::ENUM_MODE_CREATE && !empty($sObjectId)) { diff --git a/js/form_handler.js b/js/form_handler.js index 5757860f4..6f02e6423 100644 --- a/js/form_handler.js +++ b/js/form_handler.js @@ -151,9 +151,16 @@ $(function() // Intended for overloading in derived classes _onUpdateSuccess: function(oData, sFormPath) { + var me = this; + if(oData.form.hidden_fields !== undefined) + { + $.each(oData.form.hidden_fields, function( index, value ) { + me.element.find('[data-form-path="' + sFormPath + '"][data-field-id="'+value+'"][data-attribute-flag-hidden="false"]').remove(); + }); + } if(oData.form.updated_fields !== undefined) { - this.element.find('[data-form-path="' + sFormPath + '"]').trigger('update_form', {updated_fields: oData.form.updated_fields}); + me.element.find('[data-form-path="' + sFormPath + '"]').trigger('update_form', {updated_fields: oData.form.updated_fields}); } }, // Intended for overloading in derived classes