mirror of
https://github.com/Combodo/iTop.git
synced 2026-02-13 07:24:13 +01:00
Advanced Search
Conversion to search form SVN:b1162[5397]
This commit is contained in:
@@ -931,7 +931,10 @@ class FieldExpression extends UnaryExpression
|
||||
$sSearchType = AttributeDefinition::SEARCH_WIDGET_TYPE;
|
||||
}
|
||||
|
||||
return array('ref' => $this->GetParent().'.'.$this->GetName(), 'widget' => $sSearchType);
|
||||
return array(
|
||||
'widget' => $sSearchType,
|
||||
'ref' => $this->GetParent().'.'.$this->GetName(),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -58,32 +58,36 @@ class CriterionToSearchForm extends CriterionConversionAbstract
|
||||
protected static function TextToSearchForm($aCriteria)
|
||||
{
|
||||
$sOperator = $aCriteria['operator'];
|
||||
$aValues = $aCriteria['values'];
|
||||
$sValue = $aCriteria['values'][0]['value'];
|
||||
|
||||
$value = $aValues[0]['value'];
|
||||
|
||||
$bStartWithPercent = $value{0} == '%' ? true : false;
|
||||
$bEndWithPercent = $value{0} == '%' ? true : false;
|
||||
$bStartWithPercent = substr($sValue, 0, 1) == '%' ? true : false;
|
||||
$bEndWithPercent = substr($sValue, -1) == '%' ? true : false;
|
||||
|
||||
switch (true)
|
||||
{
|
||||
case ('' == $value and ($sOperator == '=' or $sOperator == 'LIKE')):
|
||||
case ('' == $sValue and ($sOperator == '=' or $sOperator == 'LIKE')):
|
||||
$aCriteria['operator'] = CriterionConversionAbstract::OP_EMPTY;
|
||||
break;
|
||||
case ('' == $value and $sOperator == '!='):
|
||||
case ('' == $sValue and $sOperator == '!='):
|
||||
$aCriteria['operator'] = CriterionConversionAbstract::OP_NOT_EMPTY;
|
||||
break;
|
||||
case ($sOperator == 'LIKE' && $bStartWithPercent && $bEndWithPercent):
|
||||
$aCriteria['operator'] = CriterionConversionAbstract::OP_CONTAINS;
|
||||
$aValues[0]['value'] = substr($value, 1, strlen($value) - 2);
|
||||
$sValue = substr($sValue, 1, -1);
|
||||
$aCriteria['values'][0]['value'] = $sValue;
|
||||
$aCriteria['values'][0]['label'] = $sValue;
|
||||
break;
|
||||
case ($sOperator == 'LIKE' && $bStartWithPercent):
|
||||
$aCriteria['operator'] = CriterionConversionAbstract::OP_ENDS_WITH;
|
||||
$aValues[0]['value'] = substr($value, 1, strlen($value) - 1);
|
||||
$sValue = substr($sValue, 1);
|
||||
$aCriteria['values'][0]['value'] = $sValue;
|
||||
$aCriteria['values'][0]['label'] = $sValue;
|
||||
break;
|
||||
case ($sOperator == 'LIKE' && $bEndWithPercent):
|
||||
$aCriteria['operator'] = CriterionConversionAbstract::OP_STARTS_WITH;
|
||||
$aValues[0]['value'] = substr($value, 0, strlen($value) - 1);
|
||||
$sValue = substr($sValue, 0, -1);
|
||||
$aCriteria['values'][0]['value'] = $sValue;
|
||||
$aCriteria['values'][0]['label'] = $sValue;
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
@@ -110,7 +110,7 @@ class SearchForm
|
||||
|
||||
$oBaseSearch = $oSearch->DeepClone();
|
||||
$oBaseSearch->ResetCondition();
|
||||
$sBaseOQL = $sBaseOql = str_replace(' WHERE 1', '', $oBaseSearch->ToOQL());
|
||||
$sBaseOQL = str_replace(' WHERE 1', '', $oBaseSearch->ToOQL());
|
||||
|
||||
|
||||
if (!isset($aExtraParams['table_id']))
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
namespace Combodo\iTop\Test\UnitTest\Application\Search;
|
||||
|
||||
use Combodo\iTop\Application\Search\CriterionConversion\CriterionToOQL;
|
||||
use Combodo\iTop\Application\Search\CriterionConversion\CriterionToSearchForm;
|
||||
use Combodo\iTop\Test\UnitTest\ItopDataTestCase;
|
||||
|
||||
class CriterionConversionTest extends ItopDataTestCase
|
||||
@@ -145,4 +146,139 @@ class CriterionConversionTest extends ItopDataTestCase
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider ToSearchFormProvider
|
||||
*/
|
||||
function testToSearchForm($aCriterion, $sExpectedOperator)
|
||||
{
|
||||
$aRes = CriterionToSearchForm::Convert($aCriterion);
|
||||
$this->debug($aRes);
|
||||
$this->assertEquals($sExpectedOperator, $aRes[0]['operator']);
|
||||
}
|
||||
|
||||
function ToSearchFormProvider()
|
||||
{
|
||||
return array(
|
||||
'=' => array(
|
||||
json_decode('[
|
||||
{
|
||||
"ref": "Contact.name",
|
||||
"widget": "string",
|
||||
"values": [
|
||||
{
|
||||
"value": "toto",
|
||||
"label": "toto"
|
||||
}
|
||||
],
|
||||
"operator": "=",
|
||||
"oql": "(`Contact`.`name` = \'toto\')"
|
||||
}
|
||||
]', true),
|
||||
'='
|
||||
),
|
||||
'starts_with' => array(
|
||||
json_decode('[
|
||||
{
|
||||
"ref": "Contact.name",
|
||||
"widget": "string",
|
||||
"values": [
|
||||
{
|
||||
"value": "toto%",
|
||||
"label": "toto%"
|
||||
}
|
||||
],
|
||||
"operator": "LIKE",
|
||||
"oql": "(`Contact`.`name` LIKE \'toto%\')"
|
||||
}
|
||||
]', true),
|
||||
'starts_with'
|
||||
),
|
||||
'ends_with' => array(
|
||||
json_decode('[
|
||||
{
|
||||
"ref": "Contact.name",
|
||||
"widget": "string",
|
||||
"values": [
|
||||
{
|
||||
"value": "%toto",
|
||||
"label": "%toto"
|
||||
}
|
||||
],
|
||||
"operator": "LIKE",
|
||||
"oql": "(`Contact`.`name` LIKE \'%toto\')"
|
||||
}
|
||||
]', true),
|
||||
'ends_with'
|
||||
),
|
||||
'contains' => array(
|
||||
json_decode('[
|
||||
{
|
||||
"widget": "string",
|
||||
"ref": "Contact.name",
|
||||
"values": [
|
||||
{
|
||||
"value": "%toto%",
|
||||
"label": "%toto%"
|
||||
}
|
||||
],
|
||||
"operator": "LIKE",
|
||||
"oql": "(`Contact`.`name` LIKE \'%toto%\')"
|
||||
}
|
||||
]', true),
|
||||
'contains'
|
||||
),
|
||||
'empty1' => array(
|
||||
json_decode('[
|
||||
{
|
||||
"widget": "string",
|
||||
"ref": "Contact.name",
|
||||
"values": [
|
||||
{
|
||||
"value": "",
|
||||
"label": ""
|
||||
}
|
||||
],
|
||||
"operator": "LIKE",
|
||||
"oql": "(`Contact`.`name` LIKE \'\')"
|
||||
}
|
||||
]', true),
|
||||
'empty'
|
||||
),
|
||||
'empty2' => array(
|
||||
json_decode('[
|
||||
{
|
||||
"widget": "string",
|
||||
"ref": "Contact.name",
|
||||
"values": [
|
||||
{
|
||||
"value": "",
|
||||
"label": ""
|
||||
}
|
||||
],
|
||||
"operator": "=",
|
||||
"oql": "(`Contact`.`name` = \'\')"
|
||||
}
|
||||
]', true),
|
||||
'empty'
|
||||
),
|
||||
'not_empty' => array(
|
||||
json_decode('[
|
||||
{
|
||||
"widget": "string",
|
||||
"ref": "Contact.name",
|
||||
"values": [
|
||||
{
|
||||
"value": "",
|
||||
"label": ""
|
||||
}
|
||||
],
|
||||
"operator": "!=",
|
||||
"oql": "(`Contact`.`name` != \'\')"
|
||||
}
|
||||
]', true),
|
||||
'not_empty'
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user