浏览代码

- bug fix: it's now possible to have several search blocks (that can be toggled) in the same page.
- new type of display block "Join" for grouping objects based on the attribute of a joined query. Will be enhanced when the full OQL support of associative select is implemented.

git-svn-id: http://svn.code.sf.net/p/itop/code/trunk@326 a333f486-631f-4898-b8df-5754b55c2be0

dflaven 15 年之前
父节点
当前提交
b38d34e427
共有 1 个文件被更改,包括 40 次插入1 次删除
  1. 40 1
      application/displayblock.class.inc.php

+ 40 - 1
application/displayblock.class.inc.php

@@ -323,6 +323,44 @@ class DisplayBlock
 			
 			break;
 			
+			case 'join':
+			if (!isset($aExtraParams['oql2']))
+			{
+				$sHtml .= $oPage->GetP("parameter oql2 is mandatory.");
+			}
+			else
+			{
+				$sOql2 = $aExtraParams['oql2'];
+				$sGroupByField = $aExtraParams['group_by'];
+				$aExtraParams['menu'] = false;
+				$oFilter1 = CMDBSearchFilter::FromOQL($sOql2);
+				$oSet1 = new CMDBObjectSet($oFilter1);
+				if (!isset($aExtraParams['group_by']))
+				{
+					// No "group by" specified, use the name of the second class
+					$sGroupByField = MetaModel::GetNameAttributeCode($oFilter1->GetClass());
+				}
+				$aResults = array();
+				while($oObj = $oSet1->Fetch())
+				{
+					$aResult[$oObj->Get($sGroupByField)] = array();
+					$oSet2 = new CMDBObjectSet($this->m_oFilter, array(), array('oql2' => $oObj->GetKey()));
+					while($oObj2 = $oSet2->Fetch())
+					{
+						$aResults[$oObj->Get($sGroupByField)][$oObj2->GetKey()] = $oObj2;
+					}
+				}
+				$sHtml .= "<table>\n";
+				foreach($aResults as $sCategory => $aObjects)
+				{
+					$sHtml .= "<tr><td><h1>$sCategory</h1></td></tr>\n";
+					$oSet = CMDBObjectSet::FromArray($this->m_oFilter->GetClass(), $aObjects);
+					$sHtml .= "<tr><td>".cmdbAbstractObject::GetDisplaySet($oPage, $oSet, $aExtraParams)."</td></tr>\n";
+				}				
+				$sHtml .= "</table>\n";
+			}
+			break;
+
 			case 'list':
 			if ( ($this->m_oSet->Count()> 0) && (UserRights::IsActionAllowed($this->m_oSet->GetClass(), UR_ACTION_READ, $this->m_oSet) == UR_ALLOWED_YES) )
 			{
@@ -426,7 +464,7 @@ class DisplayBlock
 			break;
 			
 			case 'search':
-			$iSearchSectionId = 1;
+			static $iSearchSectionId = 1;
 			$sStyle = (isset($aExtraParams['open']) && ($aExtraParams['open'] == 'true')) ? 'SearchDrawer' : 'SearchDrawer DrawerClosed';
 			$sHtml .= "<div id=\"Search_$iSearchSectionId\" class=\"$sStyle\">\n";
 			$oPage->add_ready_script("\$(\"#LnkSearch_$iSearchSectionId\").click(function() {\$(\"#Search_$iSearchSectionId\").slideToggle('normal'); $(\"#LnkSearch_$iSearchSectionId\").toggleClass('open');});");
@@ -434,6 +472,7 @@ class DisplayBlock
 	 		$sHtml .= "</div>\n";
 	 		$sHtml .= "<div class=\"HRDrawer\"></div>\n";
 	 		$sHtml .= "<div id=\"LnkSearch_$iSearchSectionId\" class=\"DrawerHandle\">Search</div>\n";
+			$iSearchSectionId++;
 			break;
 			
 			case 'pie_chart':