From 7bf49011a3ea78884ba30b166629b39fd553f8d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eric=20Espi=C3=A9?= Date: Tue, 17 Apr 2018 13:38:59 +0000 Subject: [PATCH] Advanced Search: n:n links default criteria are not read-only and organizations are hierarchical SVN:trunk[5679] --- application/ui.linkswidget.class.inc.php | 26 ++++++++++++++++++- .../search/searchform.class.inc.php | 3 +++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/application/ui.linkswidget.class.inc.php b/application/ui.linkswidget.class.inc.php index b4d7ffacc..eaed45110 100644 --- a/application/ui.linkswidget.class.inc.php +++ b/application/ui.linkswidget.class.inc.php @@ -573,7 +573,31 @@ EOF if (MetaModel::IsValidAttCode($sDestClass, $sAttCode) && !empty($defaultValue)) { - $oSearch->AddCondition($sAttCode, $defaultValue); + // Add Hierarchical condition if hierarchical key + $oAttDef = MetaModel::GetAttributeDef($sDestClass, $sAttCode); + if (isset($oAttDef) && ($oAttDef->IsExternalKey())) + { + try + { + /** @var AttributeExternalKey $oAttDef */ + $sTargetClass = $oAttDef->GetTargetClass(); + $sHierarchicalKeyCode = MetaModel::IsHierarchicalClass($sTargetClass); + if ($sHierarchicalKeyCode !== false) + { + $oFilter = new DBObjectSearch($sTargetClass); + $oFilter->AddCondition('id', $defaultValue); + $oHKFilter = new DBObjectSearch($sTargetClass); + $oHKFilter->AddCondition_PointingTo($oFilter, $sHierarchicalKeyCode, TREE_OPERATOR_BELOW); + $oSearch->AddCondition_PointingTo($oHKFilter, $sAttCode); + } + } catch (Exception $e) + { + } + } + else + { + $oSearch->AddCondition($sAttCode, $defaultValue); + } } } } diff --git a/sources/application/search/searchform.class.inc.php b/sources/application/search/searchform.class.inc.php index 0a07147f4..9a1f4da25 100644 --- a/sources/application/search/searchform.class.inc.php +++ b/sources/application/search/searchform.class.inc.php @@ -194,11 +194,14 @@ class SearchForm } $bIsRemovable = true; + /* if (isset($aExtraParams['selection_mode']) && $aExtraParams['selection_mode']) { // Mark all criterion as read-only and non-removable + // This is a controversy, the parameters were not read-only before $bIsRemovable = false; } + */ $aFields = $this->GetFields($oSet); $oSearch = $oSet->GetFilter(); $aCriterion = $this->GetCriterion($oSearch, $aFields, $aArgs, $bIsRemovable);