N°931: TagSet search form integration

This commit is contained in:
Eric
2018-09-12 15:03:35 +02:00
parent b86b24d444
commit 2ba31244c2
11 changed files with 577 additions and 327 deletions

View File

@@ -74,6 +74,7 @@ class CriterionToOQL extends CriterionConversionAbstract
self::OP_BETWEEN => 'BetweenToOql',
self::OP_REGEXP => 'RegexpToOql',
self::OP_IN => 'InToOql',
self::OP_MATCHES => 'MatchesToOql',
self::OP_ALL => 'AllToOql',
);
@@ -118,7 +119,10 @@ class CriterionToOQL extends CriterionConversionAbstract
$aValues = self::GetValues($aCriteria);
$sValue = self::GetValue($aValues, 0);
if (empty($sValue)) return "1";
if (empty($sValue))
{
return "1";
}
return "({$sRef} LIKE '%{$sValue}%')";
}
@@ -128,7 +132,10 @@ class CriterionToOQL extends CriterionConversionAbstract
$aValues = self::GetValues($aCriteria);
$sValue = self::GetValue($aValues, 0);
if (empty($sValue)) return "1";
if (empty($sValue))
{
return "1";
}
return "({$sRef} LIKE '{$sValue}%')";
}
@@ -138,7 +145,10 @@ class CriterionToOQL extends CriterionConversionAbstract
$aValues = self::GetValues($aCriteria);
$sValue = self::GetValue($aValues, 0);
if (empty($sValue)) return "1";
if (empty($sValue))
{
return "1";
}
return "({$sRef} LIKE '%{$sValue}')";
}
@@ -148,7 +158,10 @@ class CriterionToOQL extends CriterionConversionAbstract
$aValues = self::GetValues($aCriteria);
$sValue = self::GetValue($aValues, 0);
if (empty($sValue)) return "1";
if (empty($sValue))
{
return "1";
}
return "({$sRef} = '{$sValue}')";
}
@@ -158,11 +171,32 @@ class CriterionToOQL extends CriterionConversionAbstract
$aValues = self::GetValues($aCriteria);
$sValue = self::GetValue($aValues, 0);
if (empty($sValue)) return "1";
if (empty($sValue))
{
return "1";
}
return "({$sRef} REGEXP '{$sValue}')";
}
protected static function MatchesToOql($oSearch, $sRef, $aCriteria)
{
$aValues = self::GetValues($aCriteria);
$aRawValues = array();
for($i = 0; $i < count($aValues); $i++)
{
$aRawValues[] = self::GetValue($aValues, $i);
}
$sValue = implode(' ', $aRawValues);
if (empty($sValue))
{
return "1";
}
return "({$sRef} MATCHES '{$sValue}')";
}
protected static function EmptyToOql($oSearch, $sRef, $aCriteria)
{
if (isset($aCriteria['widget']))
@@ -197,18 +231,18 @@ class CriterionToOQL extends CriterionConversionAbstract
return "({$sRef} != '')";
}
/**
* @param \DBObjectSearch $oSearch
* @param string $sRef
* @param array $aCriteria
*
* @return mixed|string
*
* @throws \CoreException
* @throws \MissingQueryArgument
* @throws \MySQLException
* @throws \MySQLHasGoneAwayException
*/
/**
* @param \DBObjectSearch $oSearch
* @param string $sRef
* @param array $aCriteria
*
* @return mixed|string
*
* @throws \CoreException
* @throws \MissingQueryArgument
* @throws \MySQLException
* @throws \MySQLHasGoneAwayException
*/
protected static function InToOql($oSearch, $sRef, $aCriteria)
{
$sAttCode = $aCriteria['code'];
@@ -225,8 +259,7 @@ class CriterionToOQL extends CriterionConversionAbstract
try
{
$aAttributeDefs = MetaModel::ListAttributeDefs($sClass);
}
catch (\CoreException $e)
} catch (\CoreException $e)
{
return "1";
}
@@ -254,8 +287,7 @@ class CriterionToOQL extends CriterionConversionAbstract
try
{
$sHierarchicalKeyCode = MetaModel::IsHierarchicalClass($sTargetClass);
}
catch (\CoreException $e)
} catch (\CoreException $e)
{
}
}
@@ -371,9 +403,10 @@ class CriterionToOQL extends CriterionConversionAbstract
else
{
// Add 'AND 1' to group the 'OR' inside an AND list for OQL parsing
$sCondition = "(({$sCondition} OR {$sFilterOnUndefined}) AND 1)";
$sCondition = "(({$sCondition} OR {$sFilterOnUndefined}) AND 1)";
}
}
return $sCondition;
}
@@ -406,8 +439,7 @@ class CriterionToOQL extends CriterionConversionAbstract
$oDate = $oFormat->parse($sStartDate);
$sStartDate = $oDate->format($sAttributeClass::GetSQLFormat());
$aOQL[] = "({$sRef} >= '$sStartDate')";
}
catch (Exception $e)
} catch (Exception $e)
{
}
}
@@ -420,8 +452,7 @@ class CriterionToOQL extends CriterionConversionAbstract
$oDate = $oFormat->parse($sEndDate);
$sEndDate = $oDate->format($sAttributeClass::GetSQLFormat());
$aOQL[] = "({$sRef} <= '$sEndDate')";
}
catch (Exception $e)
} catch (Exception $e)
{
}
}

View File

@@ -71,6 +71,7 @@ class CriterionToSearchForm extends CriterionConversionAbstract
AttributeDefinition::SEARCH_WIDGET_TYPE_EXTERNAL_KEY => 'ExternalKeyToSearchForm',
AttributeDefinition::SEARCH_WIDGET_TYPE_HIERARCHICAL_KEY => 'ExternalKeyToSearchForm',
AttributeDefinition::SEARCH_WIDGET_TYPE_ENUM => 'EnumToSearchForm',
AttributeDefinition::SEARCH_WIDGET_TYPE_TAG_SET => 'TagSetToSearchForm',
);
foreach($aAndCriterionRaw as $aCriteria)
@@ -666,6 +667,36 @@ class CriterionToSearchForm extends CriterionConversionAbstract
return $aCriteria;
}
protected static function TagSetToSearchForm($aCriteria, $aFields)
{
$sOperator = $aCriteria['operator'];
switch ($sOperator)
{
case 'MATCHES':
// Nothing special to do
break;
case 'ISNULL':
$aCriteria['operator'] = CriterionConversionAbstract::OP_EQUALS;
if (isset($aCriteria['has_undefined']) && $aCriteria['has_undefined'])
{
if (!isset($aCriteria['values']))
{
$aCriteria['values'] = array();
}
// Convention for 'undefined' enums
$aCriteria['values'][] = array('value' => 'null', 'label' => Dict::S('Enum:Undefined'));
}
break;
default:
// Unknown operator
$aCriteria['widget'] = AttributeDefinition::SEARCH_WIDGET_TYPE_RAW;
break;
}
return $aCriteria;
}
protected static function ExternalKeyToSearchForm($aCriteria, $aFields)
{
$sOperator = $aCriteria['operator'];

View File

@@ -37,6 +37,7 @@ abstract class CriterionConversionAbstract
const OP_BETWEEN = 'between';
const OP_REGEXP = 'REGEXP';
const OP_ALL = 'all';
const OP_MATCHES = 'MATCHES';
}