Advanced Search: add class alias in criterion

SVN:b1162[5563]
This commit is contained in:
Eric Espié
2018-03-29 08:06:16 +00:00
parent 3246c36984
commit 11af11b3be
3 changed files with 27 additions and 16 deletions

View File

@@ -1043,6 +1043,7 @@ class FieldExpression extends UnaryExpression
return array(
'widget' => $sSearchType,
'ref' => $this->GetParent().'.'.$this->GetName(),
'class_alias' => $this->GetParent(),
);
}
}

View File

@@ -80,24 +80,28 @@ class CriterionToSearchForm extends CriterionConversionAbstract
}
$aCriteria['is_removable'] = $bIsRemovable;
// Check criteria validity
if (!array_key_exists('ref', $aCriteria) || !array_key_exists($aCriteria['ref'], $aAllFields))
if (isset($aCriteria['ref']))
{
$aCriteria['label'] = Dict::S('UI:Search:Criteria:Raw:Filtered');
if (array_key_exists('ref', $aCriteria))
$aRef = explode('.', $aCriteria['ref']);
if (isset($aClasses[$aRef[0]]))
{
$aRef = explode('.', $aCriteria['ref']);
if (isset($aClasses[$aRef[0]]))
$sClass = $aClasses[$aRef[0]];
$aCriteria['class'] = $sClass;
}
}
// Check criteria validity
if (!isset($aCriteria['ref']) || !isset($aAllFields[$aCriteria['ref']]))
{
$aCriteria['label'] = Dict::S('UI:Search:Criteria:Raw:Filtered');
if (isset($aCriteria['ref']))
{
try
{
$aCriteria['label'] = Dict::Format('UI:Search:Criteria:Raw:FilteredOn', MetaModel::GetName($sClass));
}
catch (Exception $e)
{
$sClass = $aClasses[$aRef[0]];
try
{
$aCriteria['label'] = Dict::Format('UI:Search:Criteria:Raw:FilteredOn', MetaModel::GetName($sClass));
}
catch (Exception $e)
{
}
}
}
}

View File

@@ -137,7 +137,12 @@ class SearchForm
$aFields = $this->GetFields($oSet);
$oSearch = $oSet->GetFilter();
$aCriterion = $this->GetCriterion($oSearch, $aFields, $aArgs, $bIsRemovable);
$aClasses = $oSearch->GetSelectedClasses();
$sClassAlias = '';
foreach($aClasses as $sAlias => $sClass)
{
$sClassAlias = $sAlias;
}
$oBaseSearch = $oSearch->DeepClone();
$oBaseSearch->ResetCondition();
@@ -195,6 +200,7 @@ class SearchForm
'fields' => $aFields,
'criterion' => $aCriterion,
'class_name' => $sClassName,
'class_alias' => $sClassAlias,
'base_oql' => $sBaseOQL,
),
);