diff --git a/application/cmdbabstract.class.inc.php b/application/cmdbabstract.class.inc.php index 64b024094..798dec7bf 100644 --- a/application/cmdbabstract.class.inc.php +++ b/application/cmdbabstract.class.inc.php @@ -1532,10 +1532,21 @@ EOF $oPage->add(self::GetSearchForm($oPage, $oSet, $aExtraParams)); } - + + /** + * @param WebPage $oPage + * @param CMDBObjectSet $oSet + * @param array $aExtraParams + * + * @return string + * @throws CoreException + * @throws DictExceptionMissingString + */ public static function GetSearchForm(WebPage $oPage, CMDBObjectSet $oSet, $aExtraParams = array()) { - return \Combodo\iTop\Application\Search\SearchForm::GetSearchForm($oPage, $oSet, $aExtraParams); + $oSearchForm = new \Combodo\iTop\Application\Search\SearchForm(); + + return $oSearchForm->GetSearchForm($oPage, $oSet, $aExtraParams); } /** diff --git a/sources/application/search/criterionconversion/criteriontosearchform.class.inc.php b/sources/application/search/criterionconversion/criteriontosearchform.class.inc.php index f884d3739..cd3402ee6 100644 --- a/sources/application/search/criterionconversion/criteriontosearchform.class.inc.php +++ b/sources/application/search/criterionconversion/criteriontosearchform.class.inc.php @@ -19,7 +19,9 @@ * */ - +/** + * Convert OQL expressions into structure for the search form + */ namespace Combodo\iTop\Application\Search\CriterionConversion; diff --git a/sources/application/search/criterionparser.class.inc.php b/sources/application/search/criterionparser.class.inc.php index 4aaa58b86..0c8365a22 100644 --- a/sources/application/search/criterionparser.class.inc.php +++ b/sources/application/search/criterionparser.class.inc.php @@ -65,7 +65,6 @@ class CriterionParser return $oSearch; } - $oSearch->ResetCondition(); $oExpression = \Expression::FromOQL(implode(" OR ", $aExpression)); $oSearch->AddConditionExpression($oExpression); diff --git a/sources/application/search/searchform.class.inc.php b/sources/application/search/searchform.class.inc.php index c2d7f44a0..fd5a092e3 100644 --- a/sources/application/search/searchform.class.inc.php +++ b/sources/application/search/searchform.class.inc.php @@ -41,6 +41,8 @@ use WebPage; class SearchForm { + private $aLabels = array(); + /** * @param \WebPage $oPage * @param \CMDBObjectSet $oSet @@ -50,9 +52,10 @@ class SearchForm * @throws \CoreException * @throws \DictExceptionMissingString */ - public static function GetSearchForm(WebPage $oPage, CMDBObjectSet $oSet, $aExtraParams = array()) + public function GetSearchForm(WebPage $oPage, CMDBObjectSet $oSet, $aExtraParams = array()) { $sHtml = ''; + $this->aLabels = array(); $oAppContext = new ApplicationContext(); $sClassName = $oSet->GetFilter()->GetClass(); $aListParams = array(); @@ -87,14 +90,11 @@ class SearchForm { $aListParams['selection_type'] = $aExtraParams['selection_type']; } - $sJson = stripslashes(utils::ReadParam('json', '', false, 'raw_data')); if (!empty($sJson)) { $aListParams['json'] = json_decode($sJson, true); } - - if (array_key_exists('cssCount', $aExtraParams)) { $aListParams['cssCount'] = $aExtraParams['cssCount']; @@ -128,9 +128,9 @@ class SearchForm $sPrimaryClassName = $oSet->GetClass(); $sPrimaryClassAlias = $oSet->GetClassAlias(); - $aFields = self::GetFields($sPrimaryClassName, $sPrimaryClassAlias); + $aFields = $this->GetFields($sPrimaryClassName, $sPrimaryClassAlias); $oSearch = $oSet->GetFilter(); - $aCriterion = self::GetCriterion($oSearch); + $aCriterion = $this->GetCriterion($oSearch); $oBaseSearch = $oSearch->DeepClone(); $oBaseSearch->ResetCondition(); @@ -171,7 +171,7 @@ class SearchForm * * @return array */ - public static function GetFields($sClassName, $sClassAlias) + public function GetFields($sClassName, $sClassAlias) { $aFields = array(); try @@ -189,7 +189,7 @@ class SearchForm { $oAttrDef = null; } - $aZList = self::AppendField($sClassName, $sClassAlias, $sFilterCode, $oAttrDef, $aZList); + $aZList = $this->AppendField($sClassName, $sClassAlias, $sFilterCode, $oAttrDef, $aZList); } $aFields['zlist'] = $aZList; $aOthers = array(); @@ -197,7 +197,7 @@ class SearchForm { if (!in_array($sFilterCode, $aList)) { - $aOthers = self::AppendField($sClassName, $sClassAlias, $sFilterCode, $oAttrDef, $aOthers); + $aOthers = $this->AppendField($sClassName, $sClassAlias, $sFilterCode, $oAttrDef, $aOthers); } } $aFields['others'] = $aOthers; @@ -214,7 +214,7 @@ class SearchForm * * @return array */ - public static function GetFieldAllowedValues($oAttrDef) + public function GetFieldAllowedValues($oAttrDef) { if ($oAttrDef->IsExternalKey(EXTKEY_ABSOLUTE)) { @@ -253,7 +253,7 @@ class SearchForm /** * @param DBObjectSearch $oSearch */ - public static function GetCriterion($oSearch) + public function GetCriterion($oSearch) { $oExpression = $oSearch->GetCriteria(); @@ -287,18 +287,23 @@ class SearchForm * * @return mixed */ - private static function AppendField($sClassName, $sClassAlias, $sFilterCode, $oAttrDef, $aFields) + private function AppendField($sClassName, $sClassAlias, $sFilterCode, $oAttrDef, $aFields) { if (!is_null($oAttrDef) && ($oAttrDef->GetSearchType() != AttributeDefinition::SEARCH_WIDGET_TYPE_RAW)) { - $aField = array(); - $aField['code'] = $sFilterCode; - $aField['class'] = $sClassName; - $aField['class_alias'] = $sClassAlias; - $aField['label'] = $oAttrDef->GetLabel(); - $aField['widget'] = $oAttrDef->GetSearchType(); - $aField['allowed_values'] = self::GetFieldAllowedValues($oAttrDef); - $aFields[$sClassAlias.'.'.$sFilterCode] = $aField; + $sLabel = $oAttrDef->GetLabel(); + if (!array_key_exists($sLabel, $this->aLabels)) + { + $aField = array(); + $aField['code'] = $sFilterCode; + $aField['class'] = $sClassName; + $aField['class_alias'] = $sClassAlias; + $aField['label'] = $sLabel; + $aField['widget'] = $oAttrDef->GetSearchType(); + $aField['allowed_values'] = $this->GetFieldAllowedValues($oAttrDef); + $aFields[$sClassAlias.'.'.$sFilterCode] = $aField; + $this->aLabels[$sLabel] = true; + } } return $aFields;