mirror of
https://github.com/Combodo/iTop.git
synced 2026-05-19 07:12:26 +02:00
Advanced Search: Better support of dates in expressions
SVN:b1162[5464]
This commit is contained in:
@@ -30,10 +30,17 @@ use AttributeDefinition;
|
||||
use Combodo\iTop\Application\Search\CriterionConversionAbstract;
|
||||
use DateInterval;
|
||||
use DateTime;
|
||||
use Dict;
|
||||
|
||||
class CriterionToSearchForm extends CriterionConversionAbstract
|
||||
{
|
||||
|
||||
/**
|
||||
* @param array $aAndCriterionRaw
|
||||
* @param array $aFieldsByCategory
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public static function Convert($aAndCriterionRaw, $aFieldsByCategory)
|
||||
{
|
||||
$aAllFields = array();
|
||||
@@ -50,6 +57,8 @@ class CriterionToSearchForm extends CriterionConversionAbstract
|
||||
$aMappingOperatorToFunction = array(
|
||||
AttributeDefinition::SEARCH_WIDGET_TYPE_STRING => 'TextToSearchForm',
|
||||
AttributeDefinition::SEARCH_WIDGET_TYPE_ENUM => 'EnumToSearchForm',
|
||||
AttributeDefinition::SEARCH_WIDGET_TYPE_DATE => 'DateToSearchForm',
|
||||
AttributeDefinition::SEARCH_WIDGET_TYPE_DATE_TIME => 'DateTimeToSearchForm',
|
||||
);
|
||||
|
||||
foreach($aAndCriterionRaw as $aCriteria)
|
||||
@@ -181,6 +190,7 @@ class CriterionToSearchForm extends CriterionConversionAbstract
|
||||
$aCurrCriterion['values'][] = array('value' => $sLastDate, 'label' => $sLastDate);
|
||||
|
||||
$aCurrCriterion['oql'] = "({$aPrevCriterion['oql']} AND {$aCurrCriterion['oql']})";
|
||||
$aCurrCriterion['label'] = $aPrevCriterion['label'].' '.Dict::S('Expression:Operator:AND', 'AND').' '.$aCurrCriterion['label'];
|
||||
|
||||
$aMergedCriterion[] = $aCurrCriterion;
|
||||
|
||||
@@ -236,6 +246,7 @@ class CriterionToSearchForm extends CriterionConversionAbstract
|
||||
$aCurrCriterion['values'][] = array('value' => $sLastDate, 'label' => $sLastDate);
|
||||
|
||||
$aCurrCriterion['oql'] = "({$aPrevCriterion['oql']} AND {$aCurrCriterion['oql']})";
|
||||
$aCurrCriterion['label'] = $aPrevCriterion['label'].' '.Dict::S('Expression:Operator:AND', 'AND').' '.$aCurrCriterion['label'];
|
||||
|
||||
$aMergedCriterion[] = $aCurrCriterion;
|
||||
|
||||
@@ -323,4 +334,44 @@ class CriterionToSearchForm extends CriterionConversionAbstract
|
||||
|
||||
return $aCriteria;
|
||||
}
|
||||
|
||||
protected static function DateToSearchForm($aCriteria, $aFields)
|
||||
{
|
||||
return DateTimeToSearchForm($aCriteria, $aFields);
|
||||
}
|
||||
|
||||
protected static function DateTimeToSearchForm($aCriteria, $aFields)
|
||||
{
|
||||
if (!array_key_exists('is_relative', $aCriteria) || !$aCriteria['is_relative'])
|
||||
{
|
||||
return $aCriteria;
|
||||
}
|
||||
|
||||
if (isset($aCriteria['values'][0]['value']))
|
||||
{
|
||||
$sLabel = $aCriteria['values'][0]['value'];
|
||||
if (isset($aCriteria['verb']))
|
||||
{
|
||||
switch ($aCriteria['verb'])
|
||||
{
|
||||
case 'DATE_SUB':
|
||||
$sLabel = '-'.$sLabel;
|
||||
break;
|
||||
case 'DATE_ADD':
|
||||
$sLabel = '+'.$sLabel;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (isset($aCriteria['unit']))
|
||||
{
|
||||
$sLabel .= Dict::S('Expression:Unit:Short:'.$aCriteria['unit'], $aCriteria['unit']);
|
||||
}
|
||||
$aCriteria['values'][0]['label'] = $sLabel;
|
||||
}
|
||||
|
||||
// Temporary until the JS widget support relative dates
|
||||
$aCriteria['widget'] = AttributeDefinition::SEARCH_WIDGET_TYPE_RAW;
|
||||
|
||||
return $aCriteria;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user