mirror of
https://github.com/alchemy-fr/Phraseanet.git
synced 2025-10-11 03:53:13 +00:00
50 lines
1.5 KiB
PHP
50 lines
1.5 KiB
PHP
<?php
|
|
|
|
namespace Alchemy\Phrasea\SearchEngine\Elastic\Structure;
|
|
|
|
use Alchemy\Phrasea\SearchEngine\Elastic\FieldMapping;
|
|
use Alchemy\Phrasea\SearchEngine\Elastic\Mapping;
|
|
use Alchemy\Phrasea\SearchEngine\Elastic\RecordHelper;
|
|
use Assert\Assertion;
|
|
|
|
class ValueChecker
|
|
{
|
|
private function __construct() {}
|
|
|
|
public static function isValueCompatible(Typed $typed, $value)
|
|
{
|
|
return count(self::filterByValueCompatibility([$typed], $value)) > 0;
|
|
}
|
|
|
|
public static function filterByValueCompatibility(array $list, $value)
|
|
{
|
|
Assertion::allIsInstanceOf($list, Typed::class);
|
|
$is_numeric = is_numeric($value);
|
|
$is_valid_date = RecordHelper::validateDate($value);
|
|
$filtered = [];
|
|
foreach ($list as $item) {
|
|
switch ($item->getType()) {
|
|
case FieldMapping::TYPE_FLOAT:
|
|
case FieldMapping::TYPE_DOUBLE:
|
|
case FieldMapping::TYPE_INTEGER:
|
|
case FieldMapping::TYPE_LONG:
|
|
case FieldMapping::TYPE_SHORT:
|
|
case FieldMapping::TYPE_BYTE:
|
|
if ($is_numeric) {
|
|
$filtered[] = $item;
|
|
}
|
|
break;
|
|
case FieldMapping::TYPE_DATE:
|
|
if ($is_valid_date) {
|
|
$filtered[] = $item;
|
|
}
|
|
break;
|
|
case FieldMapping::TYPE_STRING:
|
|
default:
|
|
$filtered[] = $item;
|
|
}
|
|
}
|
|
return $filtered;
|
|
}
|
|
}
|