diff --git a/sources/application/search/searchform.class.inc.php b/sources/application/search/searchform.class.inc.php
index d1facfa7f4..ce1c418e00 100644
--- a/sources/application/search/searchform.class.inc.php
+++ b/sources/application/search/searchform.class.inc.php
@@ -125,10 +125,7 @@ class SearchForm
$sHtml .= "
\n";
$sHtml .= "
\n";
- $sPrimaryClassName = $oSet->GetClass();
- $sPrimaryClassAlias = $oSet->GetClassAlias();
-
- $aFields = $this->GetFields($sPrimaryClassName, $sPrimaryClassAlias);
+ $aFields = $this->GetFields($oSet);
$oSearch = $oSet->GetFilter();
$aCriterion = $this->GetCriterion($oSearch);
@@ -165,48 +162,68 @@ class SearchForm
}
/**
- * @param $sClassName
- *
- * @param $sClassAlias
+ * @param DBObjectSet $oSet
*
* @return array
*/
- public function GetFields($sClassName, $sClassAlias)
+ public function GetFields($oSet)
{
- $aFields = array();
+ $oSearch = $oSet->GetFilter();
+ $aSelectedClasses = $oSearch->GetSelectedClasses();
+ $aAuthorizedClasses = array();
+ foreach($aSelectedClasses as $sAlias => $sClassName)
+ {
+ if (\UserRights::IsActionAllowed($sClassName, UR_ACTION_BULK_READ, $oSet) != UR_ALLOWED_NO)
+ {
+ $aAuthorizedClasses[$sAlias] = $sClassName;
+ }
+ }
+ $aAllFields = array();
try
{
- $aList = MetaModel::GetZListItems($sClassName, 'standard_search');
- $aAttrDefs = MetaModel::ListAttributeDefs($sClassName);
- $aZList = array();
- foreach($aList as $sFilterCode)
+ foreach($aAuthorizedClasses as $sAlias => $sClass)
{
- if (array_key_exists($sFilterCode, $aAttrDefs))
+ $aAttributeDefs = MetaModel::ListAttributeDefs($sClass);
+ $aList = MetaModel::GetZListItems($sClass, 'standard_search');
+ $aZList = array();
+ foreach($aList as $sAttCode)
{
- $oAttrDef = $aAttrDefs[$sFilterCode];
+ if (array_key_exists($sAttCode, $aAttributeDefs))
+ {
+ $oAttDef = $aAttributeDefs[$sAttCode];
+ $aZList = $this->AppendField($sClass, $sAlias, $sAttCode, $oAttDef, $aZList);
+ unset($aAttributeDefs[$sAttCode]);
+ }
}
- else
+ usort($aZList, function ($aItem1, $aItem2) {
+ return strcmp($aItem1['label'], $aItem2['label']);
+ });
+ $aAllFields['zlist'] = $aZList;
+
+ $aOthers = array();
+ foreach($aAttributeDefs as $sAttCode => $oAttDef)
{
- $oAttrDef = null;
+ if ($this->IsSubAttribute($oAttDef)) continue;
+
+ $aOthers = $this->AppendField($sClass, $sAlias, $sAttCode, $oAttDef, $aOthers);
}
- $aZList = $this->AppendField($sClassName, $sClassAlias, $sFilterCode, $oAttrDef, $aZList);
+ usort($aOthers, function ($aItem1, $aItem2) {
+ return strcmp($aItem1['label'], $aItem2['label']);
+ });
+
+ $aAllFields['others'] = $aOthers;
}
- $aFields['zlist'] = $aZList;
- $aOthers = array();
- foreach($aAttrDefs as $sFilterCode => $oAttrDef)
- {
- if (!in_array($sFilterCode, $aList))
- {
- $aOthers = $this->AppendField($sClassName, $sClassAlias, $sFilterCode, $oAttrDef, $aOthers);
- }
- }
- $aFields['others'] = $aOthers;
} catch (CoreException $e)
{
IssueLog::Error($e->getMessage());
}
- return $aFields;
+ return $aAllFields;
+ }
+
+ protected function IsSubAttribute($oAttDef)
+ {
+ return (($oAttDef instanceof AttributeFriendlyName) || ($oAttDef instanceof AttributeExternalField) || ($oAttDef instanceof AttributeSubItem));
}
/**
@@ -304,6 +321,22 @@ class SearchForm
$aFields[$sClassAlias.'.'.$sFilterCode] = $aField;
$this->aLabels[$sLabel] = true;
}
+
+ // Sub items
+ //
+ // if ($oAttDef->IsSearchable())
+ // {
+ // $sShortLabel = $oAttDef->GetLabel();
+ // $sLabel = $sShortAlias.$oAttDef->GetLabel();
+ // $aSubAttr = $this->GetSubAttributes($sClass, $sAttCode, $oAttDef);
+ // $aValidSubAttr = array();
+ // foreach($aSubAttr as $aSubAttDef)
+ // {
+ // $aValidSubAttr[] = array('attcodeex' => $aSubAttDef['code'], 'code' => $sShortAlias.$aSubAttDef['code'], 'label' => $aSubAttDef['label'], 'unique_label' => $sShortAlias.$aSubAttDef['unique_label']);
+ // }
+ // $aAllFields[] = array('attcodeex' => $sAttCode, 'code' => $sShortAlias.$sAttCode, 'label' => $sShortLabel, 'unique_label' => $sLabel, 'subattr' => $aValidSubAttr);
+ // }
+
}
return $aFields;