Przeglądaj źródła

FIxed the processing of hierarchical ZLists to keep the display order when plain fields and fieldsets are mixed at the same level.

git-svn-id: http://svn.code.sf.net/p/itop/code/trunk@1037 a333f486-631f-4898-b8df-5754b55c2be0
dflaven 14 lat temu
rodzic
commit
f23f0bae1c
1 zmienionych plików z 80 dodań i 21 usunięć
  1. 80 21
      application/cmdbabstract.class.inc.php

+ 80 - 21
application/cmdbabstract.class.inc.php

@@ -303,13 +303,33 @@ abstract class cmdbAbstractObject extends CMDBObject
 			{
 				$oPage->add('<td style="vertical-align:top">');
 				//$aDetails[$sTab][$sColIndex] = array();
+				$sLabel = '';
+				$sPreviousLabel = '';
+				$aDetails[$sTab][$sColIndex] = array();
 				foreach($aFieldsets as $sFieldsetName => $aFields)
 				{
-					$aDetails[$sTab][$sColIndex] = array();
-					if (!empty($sFieldsetName))
+					if (!empty($sFieldsetName) && ($sFieldsetName[0] != '_'))
 					{
-						$oPage->add('<fieldset>');
-						$oPage->add('<legend>'.Dict::S($sFieldsetName).'</legend>');
+						$sLabel = $sFieldsetName;
+					}
+					else
+					{
+						$sLabel = '';
+					}
+					if ($sLabel != $sPreviousLabel)
+					{
+						if (!empty($sPreviousLabel))
+						{
+							$oPage->add('<fieldset>');
+							$oPage->add('<legend>'.Dict::S($sPreviousLabel).'</legend>');
+						}
+						$oPage->Details($aDetails[$sTab][$sColIndex]);
+						if (!empty($sPreviousLabel))
+						{
+							$oPage->add('</fieldset>');
+						}
+						$aDetails[$sTab][$sColIndex] = array();
+						$sPreviousLabel = $sLabel;
 					}
 					foreach($aFields as $sAttCode)
 					{
@@ -320,11 +340,16 @@ abstract class cmdbAbstractObject extends CMDBObject
 							$aDetails[$sTab][$sColIndex][] = $val;
 						}				
 					}
-					$oPage->Details($aDetails[$sTab][$sColIndex]);
-					if (!empty($sFieldsetName))
-					{
-						$oPage->add('</fieldset>');
-					}
+				}
+				if (!empty($sPreviousLabel))
+				{
+					$oPage->add('<fieldset>');
+					$oPage->add('<legend>'.Dict::S($sFieldsetName).'</legend>');
+				}
+				$oPage->Details($aDetails[$sTab][$sColIndex]);
+				if (!empty($sPreviousLabel))
+				{
+					$oPage->add('</fieldset>');
 				}
 				$oPage->add('</td>');
 			}
@@ -1244,15 +1269,35 @@ EOF
 			$oPage->add('<table style="vertical-align:top"><tr>');
 			foreach($aCols as $sColIndex => $aFieldsets)
 			{
+				$sLabel = '';
+				$sPreviousLabel = '';
+				$aDetails[$sTab][$sColIndex] = array();
 				$oPage->add('<td style="vertical-align:top">');
 				//$aDetails[$sTab][$sColIndex] = array();
 				foreach($aFieldsets as $sFieldsetName => $aFields)
 				{
-					$aDetails[$sTab][$sColIndex] = array();
-					if (!empty($sFieldsetName))
+					if (!empty($sFieldsetName) && ($sFieldsetName[0]!='_'))
 					{
-						$oPage->add('<fieldset>');
-						$oPage->add('<legend>'.Dict::S($sFieldsetName).'</legend>');
+						$sLabel = $sFieldsetName;
+					}
+					else
+					{
+						$sLabel = '';
+					}
+					if ($sLabel != $sPreviousLabel)
+					{
+						if (!empty($sPreviousLabel))
+						{
+							$oPage->add('<fieldset>');
+							$oPage->add('<legend>'.Dict::S($sPreviousLabel).'</legend>');
+						}
+						$oPage->Details($aDetails[$sTab][$sColIndex]);
+						if (!empty($sPreviousLabel))
+						{
+							$oPage->add('</fieldset>');
+						}
+						$aDetails[$sTab][$sColIndex] = array();
+						$sPreviousLabel = $sLabel;
 					}
 					foreach($aFields as $sAttCode)
 					{
@@ -1308,11 +1353,16 @@ EOF
 							$aDetails[$sTab][$sColIndex][] = $aVal;
 						}				
 					}
-					$oPage->Details($aDetails[$sTab][$sColIndex]);
-					if (!empty($sFieldsetName))
-					{
-						$oPage->add('</fieldset>');
-					}
+				}
+				if (!empty($sPreviousLabel))
+				{
+					$oPage->add('<fieldset>');
+					$oPage->add('<legend>'.Dict::S($sPreviousLabel).'</legend>');
+				}
+				$oPage->Details($aDetails[$sTab][$sColIndex]);
+				if (!empty($sPreviousLabel))
+				{
+					$oPage->add('</fieldset>');
 				}
 				$oPage->add('</td>');
 			}
@@ -1435,6 +1485,7 @@ EOF
 		//echo "<pre>ZList: ";
 		//print_r($aList);
 		//echo "</pre>\n";
+		$index = 0;
 		foreach($aList as $sKey => $value)
 		{
 			if (is_array($value))
@@ -1449,7 +1500,7 @@ EOF
 						//echo "<p>Found a tab:  $sName ($sKey)</p>\n";
 						if(!isset($aDetails[$sName]))
 						{
-							$aDetails[$sName] = array('col1' => array('' => array()));
+							$aDetails[$sName] = array('col1' => array());
 						}
 						$aDetails = self::ProcessZlist($value, $aDetails, $sName, 'col1', '');
 						break;
@@ -1468,7 +1519,7 @@ EOF
 						//echo "<p>Found a column: $sName ($sKey)</p>\n";
 						if(!isset($aDetails[$sCurrentTab][$sName]))
 						{
-							$aDetails[$sCurrentTab][$sName] = array('' => array());
+							$aDetails[$sCurrentTab][$sName] = array();
 						}
 						$aDetails = self::ProcessZlist($value, $aDetails, $sCurrentTab, $sName, '');
 						break;
@@ -1478,8 +1529,16 @@ EOF
 			else
 			{
 				//echo "<p>Scalar value: $value, in [$sCurrentTab][$sCurrentCol][$sCurrentSet][]</p>\n";
-				$aDetails[$sCurrentTab][$sCurrentCol][$sCurrentSet][] = $value;
+				if (empty($sCurrentSet))
+				{
+					$aDetails[$sCurrentTab][$sCurrentCol]['_'.$index][] = $value;
+				}
+				else
+				{
+					$aDetails[$sCurrentTab][$sCurrentCol][$sCurrentSet][] = $value;
+				}
 			}
+			$index++;
 		}
 		return $aDetails;
 	}