From 3d67d17b3422f4b2bfc7d4d23266e62382fa40d0 Mon Sep 17 00:00:00 2001 From: Anne-Cath Date: Tue, 26 Aug 2025 08:52:33 +0200 Subject: [PATCH] =?UTF-8?q?N=C2=B08598=20-=20Request=20template=20class=20?= =?UTF-8?q?not=20taken=20into=20account=20on=20portal=20scopes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/attributedef.class.inc.php | 50 +++++++++++++++++++ .../portal/src/Form/ObjectFormManager.php | 5 +- 2 files changed, 54 insertions(+), 1 deletion(-) diff --git a/core/attributedef.class.inc.php b/core/attributedef.class.inc.php index 796f3fe16f..fbf7330d82 100644 --- a/core/attributedef.class.inc.php +++ b/core/attributedef.class.inc.php @@ -13332,6 +13332,56 @@ class AttributeCustomFields extends AttributeDefinition return $oForm; } + /** + * @param DBObject $oHostObject + * @param null $oFormField + * @param ObjectFormHandlerHelper $oHelper + + * Override to build the relevant form field + * + * When called first, $oFormField is null and will be created (eg. Make). Then when the ::parent is called and the + * $oFormField is passed, MakeFormField behaves more like a Prepare. + */ + public function MakeFormFieldForPortal(DBObject $oObject, $oFormField = null, $oHelper = null) + { + //ici + if ($oFormField === null) + { + $sFormFieldClass = static::GetFormFieldClass(); + $oFormField = new $sFormFieldClass($this->GetCode()); + $oFormField->SetForm($this->GetFormForPortal($oObject, null, $oHelper)); + } + parent::MakeFormField($oObject, $oFormField); + + return $oFormField; + } + /** + * @param DBObject $oHostObject + * @param null $sFormPrefix + * @param ObjectFormHandlerHelper $oHelper + * + * @return Combodo\iTop\Form\Form + * @throws \Exception + */ + public function GetFormForPortal(DBObject $oHostObject, $sFormPrefix = null, $oHelper =null) + { + try { + $oValue = $oHostObject->Get($this->GetCode()); + $oHandler = $this->GetHandler($oValue->GetValues()); + $sFormId = utils::IsNullOrEmptyString($sFormPrefix) ? 'cf_'.$this->GetCode() : $sFormPrefix.'_cf_'.$this->GetCode(); + $oHandler->BuildForm($oHostObject, $sFormId, $oHelper); + $oForm = $oHandler->GetForm(); + } + catch (Exception $e) { + $oForm = new Form(''); + $oField = new LabelField(''); + $oField->SetLabel('Custom field error: '.$e->getMessage()); + $oForm->AddField($oField); + $oForm->Finalize(); + } + + return $oForm; + } /** * Read the data from where it has been stored. This verb must be implemented as soon as LoadFromClassTables returns false * and LoadInObject returns true 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 c284c36b2a..363b51611e 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 @@ -377,7 +377,10 @@ class ObjectFormManager extends FormManager /** @var Field $oField */ $oField = null; - if (is_callable([$oAttDef, 'MakeFormField'])) + if (is_callable([$oAttDef, 'MakeFormFieldForPortal'])) + { + $oField = $oAttDef->MakeFormFieldForPortal($this->oObject, null, $this->oFormHandlerHelper); + } elseif (is_callable([$oAttDef, 'MakeFormField'])) { $oField = $oAttDef->MakeFormField($this->oObject); }