mirror of
https://github.com/Combodo/iTop.git
synced 2026-04-20 09:08:42 +02:00
Advanced Search: Undefined and Id first
SVN:b1162[5514]
This commit is contained in:
@@ -26,7 +26,6 @@ namespace Combodo\iTop\Application\Search\CriterionConversion;
|
||||
use AttributeDate;
|
||||
use AttributeDateTime;
|
||||
use AttributeDefinition;
|
||||
use AttributeExternalKey;
|
||||
use Combodo\iTop\Application\Search\AjaxSearchException;
|
||||
use Combodo\iTop\Application\Search\CriterionConversionAbstract;
|
||||
use Combodo\iTop\Application\Search\SearchForm;
|
||||
@@ -150,7 +149,6 @@ class CriterionToOQL extends CriterionConversionAbstract
|
||||
}
|
||||
|
||||
$bFilterOnUndefined = false;
|
||||
$sFilterOnUndefined = '';
|
||||
try
|
||||
{
|
||||
$aAttributeDefs = \MetaModel::ListAttributeDefs($sClass);
|
||||
@@ -190,14 +188,6 @@ class CriterionToOQL extends CriterionConversionAbstract
|
||||
$aValue = $aValues[$i];
|
||||
if (isset($aValue['value']) && ($aValue['value'] === 'null'))
|
||||
{
|
||||
if ($oAttDef instanceof AttributeExternalKey)
|
||||
{
|
||||
$sFilterOnUndefined = "({$sRef} = 0)";
|
||||
}
|
||||
else
|
||||
{
|
||||
$sFilterOnUndefined = "ISNULL({$sRef})";
|
||||
}
|
||||
$bFilterOnUndefined = true;
|
||||
unset($aValues[$i]);
|
||||
break;
|
||||
@@ -218,17 +208,18 @@ class CriterionToOQL extends CriterionConversionAbstract
|
||||
|
||||
if ($bFilterOnUndefined)
|
||||
{
|
||||
$sFilterOnUndefined = "ISNULL({$sRef})";
|
||||
if (count($aValues) === 0)
|
||||
{
|
||||
return "{$sFilterOnUndefined}";
|
||||
return $sFilterOnUndefined;
|
||||
}
|
||||
|
||||
if (count($aInValues) == 1)
|
||||
{
|
||||
return "(({$sRef} = '$sInList') OR {$sFilterOnUndefined})";
|
||||
return "((({$sRef} = '$sInList') OR {$sFilterOnUndefined}) AND 1)";
|
||||
}
|
||||
|
||||
return "({$sRef} IN ('$sInList') OR {$sFilterOnUndefined})";
|
||||
return "(({$sRef} IN ('$sInList') OR {$sFilterOnUndefined}) AND 1)";
|
||||
}
|
||||
|
||||
if (count($aInValues) == 1)
|
||||
|
||||
@@ -424,14 +424,7 @@ class CriterionToSearchForm extends CriterionConversionAbstract
|
||||
switch ($sOperator)
|
||||
{
|
||||
case '=':
|
||||
if (!isset($aCriteria['values'][0]))
|
||||
{
|
||||
$aCriteria['operator'] = CriterionConversionAbstract::OP_EMPTY;
|
||||
}
|
||||
else
|
||||
{
|
||||
$aCriteria['operator'] = CriterionConversionAbstract::OP_IN;
|
||||
}
|
||||
$aCriteria['operator'] = CriterionConversionAbstract::OP_IN;
|
||||
break;
|
||||
case '!=':
|
||||
if (!isset($aCriteria['values'][0]))
|
||||
|
||||
@@ -211,8 +211,7 @@ class SearchForm
|
||||
{
|
||||
$aAttributeDefs = MetaModel::ListAttributeDefs($sClass);
|
||||
$aList = MetaModel::GetZListItems($sClass, 'standard_search');
|
||||
|
||||
$aZList = $this->AppendId($sClass, $sAlias, array());
|
||||
$aZList = array();
|
||||
foreach($aList as $sAttCode)
|
||||
{
|
||||
if (array_key_exists($sAttCode, $aAttributeDefs))
|
||||
@@ -225,6 +224,7 @@ class SearchForm
|
||||
uasort($aZList, function ($aItem1, $aItem2) {
|
||||
return strcmp($aItem1['label'], $aItem2['label']);
|
||||
});
|
||||
$aZList = $this->AppendId($sClass, $sAlias, $aZList);
|
||||
$aAllFields['zlist'] = $aZList;
|
||||
|
||||
$aOthers = array();
|
||||
@@ -353,7 +353,8 @@ class SearchForm
|
||||
$aField['label'] = 'Id';
|
||||
$aField['widget'] = AttributeDefinition::SEARCH_WIDGET_TYPE_NUMERIC;
|
||||
$aField['is_null_allowed'] = false;
|
||||
$aFields[$sClassAlias . '.id'] = $aField;
|
||||
$aNewFields = array($sClassAlias.'.id' => $aField);
|
||||
$aFields = array_merge($aNewFields, $aFields);
|
||||
$this->aLabels['Id'] = true;
|
||||
return $aFields;
|
||||
}
|
||||
|
||||
@@ -347,14 +347,17 @@ class CriterionConversionTest extends ItopDataTestCase
|
||||
function OqlProvider()
|
||||
{
|
||||
return array(
|
||||
'ISNULL' => array('OQL' => "SELECT Server WHERE ISNULL(nb_u)"),
|
||||
'start' => array('OQL' => "SELECT Contact WHERE status = 'active' AND name LIKE 'toto%'"),
|
||||
'string starts' => array('OQL' => "SELECT Contact WHERE name LIKE 'toto%'"),
|
||||
'string ends' => array('OQL' => "SELECT Contact WHERE name LIKE '%toto'"),
|
||||
'string contains' => array('OQL' => "SELECT Contact WHERE name LIKE '%toto%'"),
|
||||
'enum + key =' => array('OQL' => "SELECT Contact WHERE status = 'active' AND org_id = 3"),
|
||||
'enum =' => array('OQL' => "SELECT Contact WHERE status = 'active'"),
|
||||
'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"),
|
||||
'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'"),
|
||||
'Date relative' => array('OQL' => "SELECT UserRequest WHERE DATE_SUB(NOW(), INTERVAL 14 DAY) < start_date"),
|
||||
'Date between 1' => array('OQL' => "SELECT UserRequest WHERE start_date > '2017-01-01 00:00:00' AND '2018-01-01 00:00:00' >= start_date"),
|
||||
'Date between 2' => array('OQL' => "SELECT UserRequest WHERE start_date > '2017-01-01 00:00:00' AND status = 'active' AND org_id = 3 AND '2018-01-01 00:00:00' >= start_date"),
|
||||
@@ -366,6 +369,7 @@ class CriterionConversionTest extends ItopDataTestCase
|
||||
'Date =' => array('OQL' => "SELECT CustomerContract WHERE (start_date = '2018-03-01')"),
|
||||
'Date =2' => array('OQL' => "SELECT UserRequest WHERE (DATE_FORMAT(start_date, '%Y-%m-%d') = '2018-03-21')"),
|
||||
'Num between 1' => array('OQL' => "SELECT Server WHERE nb_u >= 0 AND 1 >= nb_u"),
|
||||
'Num ISNULL' => array('OQL' => "SELECT Server WHERE ISNULL(nb_u)"),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user