瀏覽代碼

N°642 Portal: Flags on transition part 3, forms inheritance for stimuli.

git-svn-id: http://svn.code.sf.net/p/itop/code/trunk@4789 a333f486-631f-4898-b8df-5754b55c2be0
glajarige 8 年之前
父節點
當前提交
e4b1be4a1d
共有 1 個文件被更改,包括 31 次插入28 次删除
  1. 31 28
      datamodels/2.x/itop-portal-base/portal/src/helpers/applicationhelper.class.inc.php

+ 31 - 28
datamodels/2.x/itop-portal-base/portal/src/helpers/applicationhelper.class.inc.php

@@ -904,7 +904,7 @@ class ApplicationHelper
                                     {
                                         $sStimulusCode = $oStimulusNode->getAttribute('id');
 
-                                        // Removing default form is present (in case the default forms were parsed before the current one)
+                                        // Removing default form is present (in case the default forms were parsed before the current one (from current or parent class))
                                         if(isset($aForms[$sFormClass]['apply_stimulus'][$sStimulusCode]))
                                         {
                                             unset($aForms[$sFormClass]['apply_stimulus'][$sStimulusCode]);
@@ -972,25 +972,6 @@ class ApplicationHelper
 						$aFields['fields'] = 'details';
 					}
 
-					// Adding stimuli if explicitly defined
-                    if(in_array('apply_stimulus', $aModes))
-                    {
-                        // If stimuli are implicitly defined (empty tag), we define all those that have not already been by other forms.
-                        if(empty($aFormStimuli))
-                        {
-                            // Stimuli already declared
-                            $aDeclaredStimuli = array();
-                            if(array_key_exists($sFormClass, $aForms) && array_key_exists('apply_stimulus', $aForms[$sFormClass]))
-                            {
-                                $aDeclaredStimuli = array_keys($aForms[$sFormClass]['apply_stimulus']);
-                            }
-                            // All stimuli
-                            $aDatamodelStimuli = array_keys(MetaModel::EnumStimuli($sFormClass));
-                            // Missing stimuli
-                            $aFormStimuli = array_diff($aDatamodelStimuli, $aDeclaredStimuli);
-                        }
-                    }
-
 					// Parsing presentation
 					if ($oFormNode->GetOptionalElement('twig') !== null)
 					{
@@ -1008,6 +989,7 @@ class ApplicationHelper
 					// Adding form for each class / mode
 					foreach ($aModes as $sMode)
 					{
+					    // Initializing current class if necessary
 						if (!isset($aForms[$sFormClass]))
 						{
 							$aForms[$sFormClass] = array();
@@ -1015,17 +997,38 @@ class ApplicationHelper
 
 						if ($sMode === 'apply_stimulus')
                         {
-                            if(!isset($aForms[$sFormClass][$sMode]))
+                            // Iterating over current class and child classes to fill stimuli forms
+                            foreach (MetaModel::EnumChildClasses($sFormClass, ENUM_CHILD_CLASSES_ALL) as $sChildClass)
                             {
-                                $aForms[$sFormClass][$sMode] = array();
-                            }
+                                // Initializing child class if necessary
+                                if(!isset($aForms[$sChildClass][$sMode]))
+                                {
+                                    $aForms[$sChildClass][$sMode] = array();
+                                }
 
-                            foreach($aFormStimuli as $sFormStimulus)
-                            {
-                                if(!isset($aForms[$sFormClass][$sMode][$sFormStimulus]))
+                                // If stimuli are implicitly defined (empty tag), we define all those that have not already been by other forms.
+                                $aChildStimuli = $aFormStimuli;
+                                if(empty($aChildStimuli))
                                 {
-                                    $aForms[$sFormClass][$sMode][$sFormStimulus] = $aFields;
-                                    $aForms[$sFormClass][$sMode][$sFormStimulus]['id'] = 'apply_stimulus-'.$sFormClass.'-'.$sFormStimulus;
+                                    // Stimuli already declared
+                                    $aDeclaredStimuli = array();
+                                    if(array_key_exists($sChildClass, $aForms) && array_key_exists('apply_stimulus', $aForms[$sChildClass]))
+                                    {
+                                        $aDeclaredStimuli = array_keys($aForms[$sChildClass]['apply_stimulus']);
+                                    }
+                                    // All stimuli
+                                    $aDatamodelStimuli = array_keys(MetaModel::EnumStimuli($sChildClass));
+                                    // Missing stimuli
+                                    $aChildStimuli = array_diff($aDatamodelStimuli, $aDeclaredStimuli);
+                                }
+
+                                foreach($aChildStimuli as $sFormStimulus)
+                                {
+                                    if(!isset($aForms[$sChildClass][$sMode][$sFormStimulus]))
+                                    {
+                                        $aForms[$sChildClass][$sMode][$sFormStimulus] = $aFields;
+                                        $aForms[$sChildClass][$sMode][$sFormStimulus]['id'] = 'apply_stimulus-'.$sChildClass.'-'.$sFormStimulus;
+                                    }
                                 }
                             }
                         }