Advanced Search: Fix missing query internal params

SVN:trunk[5762]
This commit is contained in:
Eric Espié
2018-05-02 08:11:28 +00:00
parent 820c257e96
commit 21aed2d2e1
3 changed files with 33 additions and 7 deletions

View File

@@ -44,7 +44,15 @@ abstract class Expression
*/
abstract public function Translate($aTranslationData, $bMatchAll = true, $bMarkFieldsAsResolved = true);
// recursive rendering (aArgs used as input by default, or used as output if bRetrofitParams set to True
/**
* recursive rendering
*
* @param array $aArgs used as input by default, or used as output if bRetrofitParams set to True
* @param bool $bRetrofitParams
*
* @return array|string
* @throws \MissingQueryArgument
*/
abstract public function Render(&$aArgs = null, $bRetrofitParams = false);
/**
@@ -1259,6 +1267,14 @@ class VariableExpression extends UnaryExpression
}
// recursive rendering
/**
* @param null $aArgs
* @param bool $bRetrofitParams
*
* @return array|string
* @throws \MissingQueryArgument
*/
public function Render(&$aArgs = null, $bRetrofitParams = false)
{
if (is_null($aArgs))

View File

@@ -167,10 +167,10 @@ class CriterionToSearchForm extends CriterionConversionAbstract
{
if (!is_null($aPrevCriterion))
{
if (array_key_exists('ref', $aPrevCriterion))
if (array_key_exists('ref', $aPrevCriterion) && array_key_exists('widget', $aPrevCriterion))
{
// If previous has ref, the current has ref as the array is sorted with all without ref first
if (strcmp($aPrevCriterion['ref'], $aCurrCriterion['ref']) == 0)
if (($aPrevCriterion['ref'] == $aCurrCriterion['ref']) && ($aPrevCriterion['widget'] == $aCurrCriterion['widget']))
{
// Same attribute, try to merge
if (array_key_exists('widget', $aCurrCriterion))

View File

@@ -39,6 +39,7 @@ use Expression;
use FieldExpression;
use IssueLog;
use MetaModel;
use MissingQueryArgument;
use TrueExpression;
use utils;
use WebPage;
@@ -468,6 +469,7 @@ class SearchForm
* @param bool $bIsRemovable
*
* @return array
* @throws \MissingQueryArgument
*/
public function GetCriterion($oSearch, $aFields, $aArgs = array(), $bIsRemovable = true)
{
@@ -478,12 +480,20 @@ class SearchForm
{
$oExpression = $oSearch->GetCriteria();
$aArgs = MetaModel::PrepareQueryArguments($aArgs, $oSearch->GetInternalParams());
if (!empty($aArgs))
{
$aArgs = MetaModel::PrepareQueryArguments($aArgs);
$sOQL = $oExpression->Render($aArgs);
$oExpression = Expression::FromOQL($sOQL);
try
{
$sOQL = $oExpression->Render($aArgs);
$oExpression = Expression::FromOQL($sOQL);
}
catch (MissingQueryArgument $e)
{
IssueLog::Error("Search form disabled: \"".$oSearch->ToOQL()."\" Error: ".$e->getMessage());
throw $e;
}
}
$aORExpressions = Expression::Split($oExpression, 'OR');