diff --git a/core/oql/expression.class.inc.php b/core/oql/expression.class.inc.php index 98510a594..c6ab22fb4 100644 --- a/core/oql/expression.class.inc.php +++ b/core/oql/expression.class.inc.php @@ -1602,6 +1602,7 @@ class FunctionExpression extends Expression { $aCriteria = array_merge($oExpression->GetCriterion($oSearch, $aArgs, $bRetrofitParams, $oAttDef), $aCriteria); } + $aCriteria['has_undefined'] = true; break; case 'NOW': diff --git a/dictionaries/fr.dictionary.itop.ui.php b/dictionaries/fr.dictionary.itop.ui.php index fadf34b1a..68763f5af 100644 --- a/dictionaries/fr.dictionary.itop.ui.php +++ b/dictionaries/fr.dictionary.itop.ui.php @@ -1241,8 +1241,8 @@ Lors de l\'association à un déclencheur, on attribue à chaque action un numé // Expression to Natural language // Dict::Add('FR FR', 'French', 'Français', array( - 'Expression:Operator:AND' => 'ET', - 'Expression:Operator:OR' => 'OU', + 'Expression:Operator:AND' => ' ET ', + 'Expression:Operator:OR' => ' OU ', 'Expression:Unit:Short:DAY' => 'j', 'Expression:Unit:Short:WEEK' => 's', 'Expression:Unit:Short:MONTH' => 'm', diff --git a/sources/application/search/criterionconversion/criteriontosearchform.class.inc.php b/sources/application/search/criterionconversion/criteriontosearchform.class.inc.php index ac3eed301..4970a7a2e 100644 --- a/sources/application/search/criterionconversion/criteriontosearchform.class.inc.php +++ b/sources/application/search/criterionconversion/criteriontosearchform.class.inc.php @@ -334,11 +334,6 @@ class CriterionToSearchForm extends CriterionConversionAbstract return $aCriteria; } - protected static function EnumToSearchForm($aCriteria, $aFields) - { - return self::ExternalKeyToSearchForm($aCriteria, $aFields); - } - protected static function DateToSearchForm($aCriteria, $aFields) { return self::DateTimeToSearchForm($aCriteria, $aFields); @@ -417,6 +412,10 @@ class CriterionToSearchForm extends CriterionConversionAbstract return $aCriteria; } + protected static function EnumToSearchForm($aCriteria, $aFields) + { + return self::ExternalKeyToSearchForm($aCriteria, $aFields); + } protected static function ExternalKeyToSearchForm($aCriteria, $aFields) { @@ -442,6 +441,14 @@ class CriterionToSearchForm extends CriterionConversionAbstract break; case 'IN': break; + case 'OR': + // Special case when undefined and other values are selected + $aCriteria['operator'] = CriterionConversionAbstract::OP_IN; + if (isset($aCriteria['has_undefined']) && $aCriteria['has_undefined']) + { + $aCriteria['values'][] = array('value' => 'null', 'label' => 'null'); + } + break; default: // Unknown operator $aCriteria['widget'] = AttributeDefinition::SEARCH_WIDGET_TYPE_RAW; diff --git a/test/application/search/CriterionConversionTest.php b/test/application/search/CriterionConversionTest.php index aff5eea85..98da18c5f 100644 --- a/test/application/search/CriterionConversionTest.php +++ b/test/application/search/CriterionConversionTest.php @@ -355,6 +355,7 @@ class CriterionConversionTest extends ItopDataTestCase 'enum IN' => array('OQL' => "SELECT Contact WHERE status IN ('active', 'inactive')"), 'enum NOT IN' => array('OQL' => "SELECT Contact WHERE status NOT IN ('active')"), 'enum undefined' => array('OQL' => "SELECT FunctionalCI WHERE ((business_criticity = 'high') OR ISNULL(business_criticity)) AND 1"), + 'enum undefined1' => array('OQL' => "SELECT FunctionalCI WHERE ((business_criticity IN ('high', 'medium')) OR ISNULL(business_criticity)) AND 1"), 'key NOT IN' => array('OQL' => "SELECT Contact WHERE org_id NOT IN ('1')"), 'key IN' => array('OQL' => "SELECT Contact WHERE org_id IN ('1')"), 'key empty' => array('OQL' => "SELECT Person WHERE location_id = '0'"), diff --git a/test/application/search/SearchFormTest.php b/test/application/search/SearchFormTest.php index 21aaec5e9..f2b538bdb 100644 --- a/test/application/search/SearchFormTest.php +++ b/test/application/search/SearchFormTest.php @@ -56,9 +56,9 @@ class SearchFormTest extends ItopDataTestCase public function GetFieldsProvider() { return array( - array("SELECT Contact", 7, 'zlist'), + array("SELECT Contact", 8, 'zlist'), array("SELECT Contact AS C WHERE C.status = 'active'", 4, 'others'), - array("SELECT Person", 11, 'zlist'), + array("SELECT Person", 12, 'zlist'), ); }