diff --git a/core/oql/expression.class.inc.php b/core/oql/expression.class.inc.php index ef764955a..b4b0b827b 100644 --- a/core/oql/expression.class.inc.php +++ b/core/oql/expression.class.inc.php @@ -871,6 +871,21 @@ class FieldExpression extends UnaryExpression { return $aAttDefs[$this->m_sName]; } + else + { + if ($this->m_sName == 'id') + { + $aParams = array( + 'default_value' => 0, + 'is_null_allowed' => false, + 'allowed_values' => null, + 'depends_on' => null, + 'sql' => 'id', + ); + + return new AttributeInteger($this->m_sName, $aParams); + } + } } return null; diff --git a/dictionaries/en.dictionary.itop.ui.php b/dictionaries/en.dictionary.itop.ui.php index 97450768c..f3aba9a90 100644 --- a/dictionaries/en.dictionary.itop.ui.php +++ b/dictionaries/en.dictionary.itop.ui.php @@ -1468,6 +1468,9 @@ When associated with a trigger, each action is given an "order" number, specifyi 'UI:Search:Criteria:DateTime:PlaceholderFromTime' => 'Any date', 'UI:Search:Criteria:DateTime:PlaceholderUntil' => 'Any date', 'UI:Search:Criteria:DateTime:PlaceholderUntilTime' => 'Any date', + + 'UI:Search:Criteria:Raw:Filtered' => 'Filtered', + 'UI:Search:Criteria:Raw:FilteredOn' => 'Filtered on %1$s', )); // diff --git a/dictionaries/fr.dictionary.itop.ui.php b/dictionaries/fr.dictionary.itop.ui.php index 4fe055726..e7eef61d3 100644 --- a/dictionaries/fr.dictionary.itop.ui.php +++ b/dictionaries/fr.dictionary.itop.ui.php @@ -1234,6 +1234,9 @@ Lors de l\'association à un déclencheur, on attribue à chaque action un numé // - 'UI:Search:Value:Filter:Placeholder' => 'Filter...', 'UI:Search:Value:Toggler:CheckAllNone' => 'Check all / none', + + 'UI:Search:Criteria:Raw:Filtered' => 'Filtré', + 'UI:Search:Criteria:Raw:FilteredOn' => 'Filtré sur %1$s', )); diff --git a/sources/application/search/criterionconversion/criteriontosearchform.class.inc.php b/sources/application/search/criterionconversion/criteriontosearchform.class.inc.php index 650bbf768..2f83619e3 100644 --- a/sources/application/search/criterionconversion/criteriontosearchform.class.inc.php +++ b/sources/application/search/criterionconversion/criteriontosearchform.class.inc.php @@ -32,6 +32,8 @@ use Combodo\iTop\Application\Search\CriterionConversionAbstract; use DateInterval; use DateTime; use Dict; +use Exception; +use MetaModel; class CriterionToSearchForm extends CriterionConversionAbstract { @@ -40,9 +42,11 @@ class CriterionToSearchForm extends CriterionConversionAbstract * @param array $aAndCriterionRaw * @param array $aFieldsByCategory * + * @param array $aClasses all the classes of the filter + * * @return array */ - public static function Convert($aAndCriterionRaw, $aFieldsByCategory) + public static function Convert($aAndCriterionRaw, $aFieldsByCategory, $aClasses) { $aAllFields = array(); foreach($aFieldsByCategory as $aFields) @@ -71,6 +75,22 @@ class CriterionToSearchForm extends CriterionConversionAbstract if (!array_key_exists('ref', $aCriteria) || !array_key_exists($aCriteria['ref'], $aAllFields)) { $aCriteria['widget'] = AttributeDefinition::SEARCH_WIDGET_TYPE_RAW; + $aCriteria['label'] = Dict::S('UI:Search:Criteria:Raw:Filtered'); + if (array_key_exists('ref', $aCriteria)) + { + $aRef = explode('.', $aCriteria['ref']); + if (isset($aClasses[$aRef[0]])) + { + $sClass = $aClasses[$aRef[0]]; + try + { + $aCriteria['label'] = Dict::Format('UI:Search:Criteria:Raw:FilteredOn', MetaModel::GetName($sClass)); + } + catch (Exception $e) + { + } + } + } } if (array_key_exists('widget', $aCriteria)) { diff --git a/sources/application/search/searchform.class.inc.php b/sources/application/search/searchform.class.inc.php index 38562eade..1555fc858 100644 --- a/sources/application/search/searchform.class.inc.php +++ b/sources/application/search/searchform.class.inc.php @@ -206,8 +206,6 @@ class SearchForm public function GetFields($oSet) { $oSearch = $oSet->GetFilter(); - // TODO: Later consider all the fields including the joined classes - //$aAllClasses = $oSearch->GetJoinedClasses(); $aAllClasses = $oSearch->GetSelectedClasses(); $aAuthorizedClasses = array(); foreach($aAllClasses as $sAlias => $sClassName) @@ -334,7 +332,7 @@ class SearchForm } /** - * @param \DBSearch $oSearch + * @param \DBObjectSearch $oSearch * @param array $aFields * * @param array $aArgs @@ -367,7 +365,7 @@ class SearchForm } $aAndCriterion[] = $oAndSubExpr->GetCriterion($oSearch); } - $aAndCriterion = CriterionToSearchForm::Convert($aAndCriterion, $aFields); + $aAndCriterion = CriterionToSearchForm::Convert($aAndCriterion, $aFields, $oSearch->GetJoinedClasses()); $aOrCriterion[] = array('and' => $aAndCriterion); } diff --git a/test/application/search/CriterionConversionTest.php b/test/application/search/CriterionConversionTest.php index 11b3eb614..0112ee318 100644 --- a/test/application/search/CriterionConversionTest.php +++ b/test/application/search/CriterionConversionTest.php @@ -165,7 +165,7 @@ class CriterionConversionTest extends ItopDataTestCase $oSearchForm = new SearchForm(); $oSearch = \DBSearch::FromOQL("SELECT Contact"); $aFields = $oSearchForm->GetFields(new \DBObjectSet($oSearch)); - $aRes = CriterionToSearchForm::Convert($aCriterion, $aFields); + $aRes = CriterionToSearchForm::Convert($aCriterion, $aFields, $oSearch->GetJoinedClasses()); $this->debug($aRes); $this->assertEquals($sExpectedOperator, $aRes[0]['operator']); }