diff --git a/portal/index.php b/portal/index.php index bf29ae1a0..b7bc1b8fd 100644 --- a/portal/index.php +++ b/portal/index.php @@ -1144,7 +1144,22 @@ function MakeStimulusForm(WebPage $oP, $oObj, $sStimulusCode, $aEditAtt) $oP->add("GetKey()."\">"); $oP->add(""); $oP->add("\n"); - + + $aTransitions = $oObj->EnumTransitions(); + $aStimuli = MetaModel::EnumStimuli($sClass); + if (!isset($aTransitions[$sStimulusCode])) + { + // Invalid stimulus + throw new ApplicationException(Dict::Format('UI:Error:Invalid_Stimulus_On_Object_In_State', $sStimulusCode, $oObj->GetName(), $oObj->GetStateLabel())); + } + + // Compute the attribute flags in the target state + $aTransition = $aTransitions[$sStimulusCode]; + $sTargetState = $aTransition['target_state']; + $aTargetStates = MetaModel::EnumStates($sClass); + $aTargetState = $aTargetStates[$sTargetState]; + $aExpectedAttributes = $aTargetState['attribute_list']; + foreach($aEditAtt as $sAttCode) { $sValue = $oObj->Get($sAttCode); @@ -1152,7 +1167,8 @@ function MakeStimulusForm(WebPage $oP, $oObj, $sStimulusCode, $aEditAtt) $aArgs = array('this' => $oObj, 'formPrefix' => ''); $oAttDef = MetaModel::GetAttributeDef($sClass, $sAttCode); $sInputId = 'input_'.$sAttCode; - $sHTMLValue = "".cmdbAbstractObject::GetFormElementForField($oP, $sClass, $sAttCode, $oAttDef, $sValue, $sDisplayValue, $sInputId, '', 0 /*$iFlags*/, $aArgs).''; + $iFlags = array_key_exists($sAttCode, $aExpectedAttributes) ? $aExpectedAttributes[$sAttCode] : 0; + $sHTMLValue = "".cmdbAbstractObject::GetFormElementForField($oP, $sClass, $sAttCode, $oAttDef, $sValue, $sDisplayValue, $sInputId, '', $iFlags, $aArgs).''; $oP->add('