From 4006fce0f22dae7d8413cc577de716090f15b938 Mon Sep 17 00:00:00 2001 From: Romain Quetiez Date: Fri, 11 Mar 2016 20:42:04 +0000 Subject: [PATCH] Exclude magic parameters when listing query parameters (refactoring from run_query) This enables the use of magic parameters in the exports. The issue was less exposed in iTop 2.2.0 because only one single magic parameter was available. SVN:trunk[3948] --- core/dbobjectsearch.class.php | 41 +++++++++++++++++++++++++++++++++-- core/dbsearch.class.php | 2 +- core/dbunionsearch.class.php | 8 +++---- pages/run_query.php | 25 --------------------- 4 files changed, 44 insertions(+), 32 deletions(-) diff --git a/core/dbobjectsearch.class.php b/core/dbobjectsearch.class.php index a7e2b0cb0..0cd039639 100644 --- a/core/dbobjectsearch.class.php +++ b/core/dbobjectsearch.class.php @@ -728,11 +728,48 @@ class DBObjectSearch extends DBSearch return $this->m_aParams; } - public function GetQueryParams() + public function GetQueryParams($bExcludeMagicParams = true) { $aParams = array(); $this->m_oSearchCondition->Render($aParams, true); - return $aParams; + + if ($bExcludeMagicParams) + { + $aRet = array(); + + // Make the list of acceptable arguments... could be factorized with run_query, into oSearch->GetQueryParams($bExclude magic params) + $aNakedMagicArguments = array(); + foreach (MetaModel::PrepareQueryArguments(array()) as $sArgName => $value) + { + $iPos = strpos($sArgName, '->object()'); + if ($iPos === false) + { + $aNakedMagicArguments[$sArgName] = $value; + } + else + { + $aNakedMagicArguments[substr($sArgName, 0, $iPos)] = true; + } + } + foreach ($aParams as $sParam => $foo) + { + $iPos = strpos($sParam, '->'); + if ($iPos === false) + { + $sRefName = $sParam; + } + else + { + $sRefName = substr($sParam, 0, $iPos); + } + if (!array_key_exists($sRefName, $aNakedMagicArguments)) + { + $aRet[$sParam] = $foo; + } + } + } + + return $aRet; } public function ListConstantFields() diff --git a/core/dbsearch.class.php b/core/dbsearch.class.php index e325fbeb8..83c6e594e 100644 --- a/core/dbsearch.class.php +++ b/core/dbsearch.class.php @@ -130,7 +130,7 @@ abstract class DBSearch abstract public function SetInternalParams($aParams); abstract public function GetInternalParams(); - abstract public function GetQueryParams(); + abstract public function GetQueryParams($bExcludeMagicParams = true); abstract public function ListConstantFields(); /** diff --git a/core/dbunionsearch.class.php b/core/dbunionsearch.class.php index ecc07560d..f7dfdae71 100644 --- a/core/dbunionsearch.class.php +++ b/core/dbunionsearch.class.php @@ -1,5 +1,5 @@ aSearches as $oSearch) { - $aParams = array_merge($oSearch->GetQueryParams(), $aParams); + $aParams = array_merge($oSearch->GetQueryParams($bExcludeMagicParams), $aParams); } return $aParams; } diff --git a/pages/run_query.php b/pages/run_query.php index ab6bb59b6..2546e02d7 100644 --- a/pages/run_query.php +++ b/pages/run_query.php @@ -143,36 +143,11 @@ try } } - $aNakedMagicArguments = array(); - foreach (MetaModel::PrepareQueryArguments(array()) as $sArgName => $value) - { - $iPos = strpos($sArgName, '->object()'); - if ($iPos === false) - { - $aNakedMagicArguments[$sArgName] = $value; - } - else - { - $aNakedMagicArguments[substr($sArgName, 0, $iPos)] = true; - } - } if ($oFilter) { $aArgs = array(); foreach($oFilter->GetQueryParams() as $sParam => $foo) { - // Skip magic parameters - $iPos = strpos($sParam, '->'); - if ($iPos === false) - { - $sRefName = $sParam; - } - else - { - $sRefName = substr($sParam, 0, $iPos); - } - if (array_key_exists($sRefName, $aNakedMagicArguments)) continue; - $value = utils::ReadParam('arg_'.$sParam, null, true, 'raw_data'); if (!is_null($value)) {