select use binding
This commit is contained in:
@@ -59,7 +59,7 @@ class Converter
|
||||
public function __construct(
|
||||
string $entityType,
|
||||
User $user,
|
||||
ItemGeneralConverter $itemConverter,
|
||||
ItemConverter $itemConverter,
|
||||
Scanner $scanner,
|
||||
RandomStringGenerator $randomStringGenerator,
|
||||
ORMDefs $ormDefs
|
||||
@@ -72,7 +72,7 @@ class Converter
|
||||
$this->ormDefs = $ormDefs;
|
||||
}
|
||||
|
||||
public function convert(QueryBuilder $queryBuilder, Item $item) : WhereClause
|
||||
public function convert(QueryBuilder $queryBuilder, Item $item): WhereClause
|
||||
{
|
||||
$whereClause = [];
|
||||
|
||||
@@ -93,7 +93,7 @@ class Converter
|
||||
return WhereClause::fromRaw($whereClause);
|
||||
}
|
||||
|
||||
protected function itemToList(Item $item) : array
|
||||
protected function itemToList(Item $item): array
|
||||
{
|
||||
if ($item->getType() !== 'and') {
|
||||
return [
|
||||
@@ -110,7 +110,7 @@ class Converter
|
||||
return $list;
|
||||
}
|
||||
|
||||
protected function processItem(QueryBuilder $queryBuilder, Item $item) : ?array
|
||||
protected function processItem(QueryBuilder $queryBuilder, Item $item): ?array
|
||||
{
|
||||
$type = $item->getType();
|
||||
$attribute = $item->getAttribute();
|
||||
@@ -135,7 +135,7 @@ class Converter
|
||||
return $this->itemConverter->convert($queryBuilder, $item)->getRaw();
|
||||
}
|
||||
|
||||
protected function applyInCategory(QueryBuilder $queryBuilder, string $attribute, $value) : array
|
||||
protected function applyInCategory(QueryBuilder $queryBuilder, string $attribute, $value): array
|
||||
{
|
||||
$link = $attribute;
|
||||
|
||||
@@ -196,7 +196,7 @@ class Converter
|
||||
throw new Error("Not supported link '{$link}' in where item.");
|
||||
}
|
||||
|
||||
protected function applyIsUserFromTeams(QueryBuilder $queryBuilder, string $attribute, $value) : array
|
||||
protected function applyIsUserFromTeams(QueryBuilder $queryBuilder, string $attribute, $value): array
|
||||
{
|
||||
$link = $attribute;
|
||||
|
||||
|
||||
@@ -32,6 +32,9 @@ namespace Espo\Core\Select\Where;
|
||||
use Espo\Core\{
|
||||
Utils\Metadata,
|
||||
InjectableFactory,
|
||||
Binding\BindingContainer,
|
||||
Binding\Binder,
|
||||
Binding\BindingData,
|
||||
};
|
||||
|
||||
use Espo\{
|
||||
@@ -50,33 +53,86 @@ class ConverterFactory
|
||||
$this->metadata = $metadata;
|
||||
}
|
||||
|
||||
public function create(string $entityType, User $user) : Converter
|
||||
public function create(string $entityType, User $user): Converter
|
||||
{
|
||||
$dateTimeItemTransformerClassName = $this->getDateTimeItemTransformerClassName($entityType);
|
||||
$dateTimeItemTransformer = $this->createDateTimeItemTranformer($entityType, $user);
|
||||
|
||||
$dateTimeItemTransformer = $this->injectableFactory->createWith($dateTimeItemTransformerClassName, [
|
||||
'entityType' => $entityType,
|
||||
'user' => $user,
|
||||
]);
|
||||
$itemConverter = $this->createItemConverter($entityType, $user, $dateTimeItemTransformer);
|
||||
|
||||
$itemConverterClassName = $this->getItemConverterClassName($entityType);
|
||||
$className = $this->getConverterClassName($entityType);
|
||||
|
||||
$itemConverter = $this->injectableFactory->createWith($itemConverterClassName, [
|
||||
'entityType' => $entityType,
|
||||
'user' => $user,
|
||||
'dateTimeItemTransformer' => $dateTimeItemTransformer,
|
||||
]);
|
||||
$bindingData = new BindingData();
|
||||
|
||||
$converterClassName = $this->getConverterClassName($entityType);
|
||||
$binder = new Binder($bindingData);
|
||||
|
||||
return $this->injectableFactory->createWith($converterClassName, [
|
||||
'entityType' => $entityType,
|
||||
'user' => $user,
|
||||
'itemConverter' => $itemConverter,
|
||||
]);
|
||||
$binder
|
||||
->bindInstance(User::class, $user);
|
||||
|
||||
$binder
|
||||
->for($className)
|
||||
->bindValue('$entityType', $entityType)
|
||||
->bindInstance(ItemConverter::class, $itemConverter);
|
||||
|
||||
$bindingContainer = new BindingContainer($bindingData);
|
||||
|
||||
return $this->injectableFactory->createWithBinding($className, $bindingContainer);
|
||||
}
|
||||
|
||||
private function getConverterClassName(string $entityType) : string
|
||||
private function createDateTimeItemTranformer(string $entityType, User $user): DateTimeItemTransformer
|
||||
{
|
||||
$className = $this->getDateTimeItemTransformerClassName($entityType);
|
||||
|
||||
$bindingData = new BindingData();
|
||||
|
||||
$binder = new Binder($bindingData);
|
||||
|
||||
$binder
|
||||
->bindInstance(User::class, $user);
|
||||
|
||||
$binder
|
||||
->for($className)
|
||||
->bindValue('$entityType', $entityType);
|
||||
|
||||
$binder
|
||||
->for(DateTimeItemTransformer::class)
|
||||
->bindValue('$entityType', $entityType);
|
||||
|
||||
$bindingContainer = new BindingContainer($bindingData);
|
||||
|
||||
return $this->injectableFactory->createWithBinding($className, $bindingContainer);
|
||||
}
|
||||
|
||||
private function createItemConverter(
|
||||
string $entityType,
|
||||
User $user,
|
||||
DateTimeItemTransformer $dateTimeItemTransformer
|
||||
): ItemConverter {
|
||||
|
||||
$className = $this->getItemConverterClassName($entityType);
|
||||
|
||||
$bindingData = new BindingData();
|
||||
|
||||
$binder = new Binder($bindingData);
|
||||
|
||||
$binder
|
||||
->bindInstance(User::class, $user);
|
||||
|
||||
$binder
|
||||
->for($className)
|
||||
->bindValue('$entityType', $entityType)
|
||||
->bindInstance(DateTimeItemTransformer::class, $dateTimeItemTransformer);
|
||||
|
||||
$binder
|
||||
->for(ItemGeneralConverter::class)
|
||||
->bindValue('$entityType', $entityType)
|
||||
->bindInstance(DateTimeItemTransformer::class, $dateTimeItemTransformer);
|
||||
|
||||
$bindingContainer = new BindingContainer($bindingData);
|
||||
|
||||
return $this->injectableFactory->createWithBinding($className, $bindingContainer);
|
||||
}
|
||||
|
||||
private function getConverterClassName(string $entityType): string
|
||||
{
|
||||
$className = $this->metadata->get(['selectDefs', $entityType, 'whereConverterClassName']);
|
||||
|
||||
@@ -87,7 +143,7 @@ class ConverterFactory
|
||||
return Converter::class;
|
||||
}
|
||||
|
||||
private function getItemConverterClassName(string $entityType) : string
|
||||
private function getItemConverterClassName(string $entityType): string
|
||||
{
|
||||
$className = $this->metadata->get(['selectDefs', $entityType, 'whereItemConverterClassName']);
|
||||
|
||||
@@ -98,9 +154,10 @@ class ConverterFactory
|
||||
return ItemGeneralConverter::class;
|
||||
}
|
||||
|
||||
private function getDateTimeItemTransformerClassName(string $entityType) : string
|
||||
private function getDateTimeItemTransformerClassName(string $entityType): string
|
||||
{
|
||||
$className = $this->metadata->get(['selectDefs', $entityType, 'whereDateTimeItemTransformerClassName']);
|
||||
$className = $this->metadata
|
||||
->get(['selectDefs', $entityType, 'whereDateTimeItemTransformerClassName']);
|
||||
|
||||
if ($className) {
|
||||
return $className;
|
||||
|
||||
@@ -39,5 +39,5 @@ use Espo\{
|
||||
*/
|
||||
interface ItemConverter
|
||||
{
|
||||
public function convert(QueryBuilder $queryBuilder, Item $item) : WhereClauseItem;
|
||||
public function convert(QueryBuilder $queryBuilder, Item $item): WhereClauseItem;
|
||||
}
|
||||
|
||||
@@ -33,6 +33,9 @@ use Espo\Core\{
|
||||
Exceptions\Error,
|
||||
InjectableFactory,
|
||||
Utils\Metadata,
|
||||
Binding\BindingContainer,
|
||||
Binding\Binder,
|
||||
Binding\BindingData,
|
||||
};
|
||||
|
||||
use Espo\{
|
||||
@@ -56,7 +59,7 @@ class ItemConverterFactory
|
||||
return (bool) $this->getClassNameForType($type);
|
||||
}
|
||||
|
||||
public function createForType(string $type, string $entityType, User $user) : ItemConverter
|
||||
public function createForType(string $type, string $entityType, User $user): ItemConverter
|
||||
{
|
||||
$className = $this->getClassNameForType($type);
|
||||
|
||||
@@ -64,25 +67,35 @@ class ItemConverterFactory
|
||||
throw new Error("Where item converter class name is not defined.");
|
||||
}
|
||||
|
||||
return $this->injectableFactory->createWith($className, [
|
||||
'entityType' => $entityType,
|
||||
'user' => $user,
|
||||
]);
|
||||
$bindingData = new BindingData();
|
||||
|
||||
$binder = new Binder($bindingData);
|
||||
|
||||
$binder
|
||||
->bindInstance(User::class, $user);
|
||||
|
||||
$binder
|
||||
->for($className)
|
||||
->bindValue('$entityType', $entityType);
|
||||
|
||||
$bindingContainer = new BindingContainer($bindingData);
|
||||
|
||||
return $this->injectableFactory->createWithBinding($className, $bindingContainer);
|
||||
}
|
||||
|
||||
protected function getClassNameForType(string $type) : ?string
|
||||
protected function getClassNameForType(string $type): ?string
|
||||
{
|
||||
return $this->metadata->get([
|
||||
'app', 'select', 'whereItemConverterClassNameMap', $type
|
||||
]);
|
||||
}
|
||||
|
||||
public function has(string $entityType, string $attribute, string $type) : bool
|
||||
public function has(string $entityType, string $attribute, string $type): bool
|
||||
{
|
||||
return (bool) $this->getClassName($entityType, $attribute, $type);
|
||||
}
|
||||
|
||||
public function create(string $entityType, string $attribute, string $type, User $user) : ItemConverter
|
||||
public function create(string $entityType, string $attribute, string $type, User $user): ItemConverter
|
||||
{
|
||||
$className = $this->getClassName($entityType, $attribute, $type);
|
||||
|
||||
@@ -90,13 +103,23 @@ class ItemConverterFactory
|
||||
throw new Error("Where item converter class name is not defined.");
|
||||
}
|
||||
|
||||
return $this->injectableFactory->createWith($className, [
|
||||
'entityType' => $entityType,
|
||||
'user' => $user,
|
||||
]);
|
||||
$bindingData = new BindingData();
|
||||
|
||||
$binder = new Binder($bindingData);
|
||||
|
||||
$binder
|
||||
->bindInstance(User::class, $user);
|
||||
|
||||
$binder
|
||||
->for($className)
|
||||
->bindValue('$entityType', $entityType);
|
||||
|
||||
$bindingContainer = new BindingContainer($bindingData);
|
||||
|
||||
return $this->injectableFactory->createWithBinding($className, $bindingContainer);
|
||||
}
|
||||
|
||||
protected function getClassName(string $entityType, string $attribute, string $type) : ?string
|
||||
protected function getClassName(string $entityType, string $attribute, string $type): ?string
|
||||
{
|
||||
return $this->metadata->get([
|
||||
'selectDefs', $entityType, 'whereItemConverterClassNameMap', $attribute . '_' . $type
|
||||
|
||||
@@ -48,7 +48,7 @@ use DateInterval;
|
||||
/**
|
||||
* Converts a where item to a where clause (for ORM).
|
||||
*/
|
||||
class ItemGeneralConverter
|
||||
class ItemGeneralConverter implements ItemConverter
|
||||
{
|
||||
protected $entityType;
|
||||
|
||||
@@ -90,7 +90,7 @@ class ItemGeneralConverter
|
||||
$this->config = $config;
|
||||
}
|
||||
|
||||
public function convert(QueryBuilder $queryBuilder, Item $item) : WhereClauseItem
|
||||
public function convert(QueryBuilder $queryBuilder, Item $item): WhereClauseItem
|
||||
{
|
||||
$type = $item->getType();
|
||||
$value = $item->getValue();
|
||||
@@ -187,8 +187,12 @@ class ItemGeneralConverter
|
||||
}
|
||||
|
||||
protected function groupProcessAndOr(
|
||||
QueryBuilder $queryBuilder, string $type, ?string $attribute, $value
|
||||
) : array {
|
||||
QueryBuilder $queryBuilder,
|
||||
string $type,
|
||||
?string $attribute,
|
||||
$value
|
||||
): array {
|
||||
|
||||
if (!is_array($value)) {
|
||||
throw new Error("Bad where item.");
|
||||
}
|
||||
@@ -213,8 +217,12 @@ class ItemGeneralConverter
|
||||
}
|
||||
|
||||
protected function groupProcessSubQuery(
|
||||
QueryBuilder $queryBuilder, string $type, ?string $attribute, $value
|
||||
) : array {
|
||||
QueryBuilder $queryBuilder,
|
||||
string $type,
|
||||
?string $attribute,
|
||||
$value
|
||||
): array {
|
||||
|
||||
if (!is_array($value)) {
|
||||
throw new Error("Bad where item.");
|
||||
}
|
||||
@@ -249,8 +257,12 @@ class ItemGeneralConverter
|
||||
}
|
||||
|
||||
protected function groupProcessColumn(
|
||||
QueryBuilder $queryBuilder, string $type, string $attribute, $value
|
||||
) : array {
|
||||
QueryBuilder $queryBuilder,
|
||||
string $type,
|
||||
string $attribute,
|
||||
$value
|
||||
): array {
|
||||
|
||||
$link = $this->metadata->get(['entityDefs', $this->entityType, 'fields', $attribute, 'link']);
|
||||
|
||||
$column = $this->metadata->get(['entityDefs', $this->entityType, 'fields', $attribute, 'column']);
|
||||
@@ -309,8 +321,11 @@ class ItemGeneralConverter
|
||||
}
|
||||
|
||||
protected function groupProcessArray(
|
||||
QueryBuilder $queryBuilder, string $type, string $attribute, $value
|
||||
) : array {
|
||||
QueryBuilder $queryBuilder,
|
||||
string $type,
|
||||
string $attribute,
|
||||
$value
|
||||
): array {
|
||||
|
||||
$arrayValueAlias = 'arrayFilter' . $this->randomStringGenerator->generate();
|
||||
|
||||
@@ -469,7 +484,7 @@ class ItemGeneralConverter
|
||||
/**
|
||||
* A complex expression w/o a value.
|
||||
*/
|
||||
protected function processExpression(QueryBuilder $queryBuilder, string $attribute, $value) : array
|
||||
protected function processExpression(QueryBuilder $queryBuilder, string $attribute, $value): array
|
||||
{
|
||||
$key = $attribute;
|
||||
|
||||
@@ -482,111 +497,111 @@ class ItemGeneralConverter
|
||||
];
|
||||
}
|
||||
|
||||
protected function processLike(QueryBuilder $queryBuilder, string $attribute, $value) : array
|
||||
protected function processLike(QueryBuilder $queryBuilder, string $attribute, $value): array
|
||||
{
|
||||
return [
|
||||
$attribute . '*' => $value,
|
||||
];
|
||||
}
|
||||
|
||||
protected function processNotLike(QueryBuilder $queryBuilder, string $attribute, $value) : array
|
||||
protected function processNotLike(QueryBuilder $queryBuilder, string $attribute, $value): array
|
||||
{
|
||||
return [
|
||||
$attribute . '!*' => $value,
|
||||
];
|
||||
}
|
||||
|
||||
protected function processEquals(QueryBuilder $queryBuilder, string $attribute, $value) : array
|
||||
protected function processEquals(QueryBuilder $queryBuilder, string $attribute, $value): array
|
||||
{
|
||||
return [
|
||||
$attribute . '=' => $value,
|
||||
];
|
||||
}
|
||||
|
||||
protected function processOn(QueryBuilder $queryBuilder, string $attribute, $value) : array
|
||||
protected function processOn(QueryBuilder $queryBuilder, string $attribute, $value): array
|
||||
{
|
||||
return $this->processEquals($queryBuilder, $attribute, $value);
|
||||
}
|
||||
|
||||
protected function processNotEquals(QueryBuilder $queryBuilder, string $attribute, $value) : array
|
||||
protected function processNotEquals(QueryBuilder $queryBuilder, string $attribute, $value): array
|
||||
{
|
||||
return [
|
||||
$attribute . '!=' => $value,
|
||||
];
|
||||
}
|
||||
|
||||
protected function processNotOn(QueryBuilder $queryBuilder, string $attribute, $value) : array
|
||||
protected function processNotOn(QueryBuilder $queryBuilder, string $attribute, $value): array
|
||||
{
|
||||
return $this->processNotEquals($queryBuilder, $attribute, $value);
|
||||
}
|
||||
|
||||
protected function processStartsWith(QueryBuilder $queryBuilder, string $attribute, $value) : array
|
||||
protected function processStartsWith(QueryBuilder $queryBuilder, string $attribute, $value): array
|
||||
{
|
||||
return [
|
||||
$attribute . '*' => $value . '%',
|
||||
];
|
||||
}
|
||||
|
||||
protected function processEndsWith(QueryBuilder $queryBuilder, string $attribute, $value) : array
|
||||
protected function processEndsWith(QueryBuilder $queryBuilder, string $attribute, $value): array
|
||||
{
|
||||
return [
|
||||
$attribute . '*' => '%' . $value,
|
||||
];
|
||||
}
|
||||
|
||||
protected function processContains(QueryBuilder $queryBuilder, string $attribute, $value) : array
|
||||
protected function processContains(QueryBuilder $queryBuilder, string $attribute, $value): array
|
||||
{
|
||||
return [
|
||||
$attribute . '*' => '%' . $value . '%',
|
||||
];
|
||||
}
|
||||
|
||||
protected function processNotContains(QueryBuilder $queryBuilder, string $attribute, $value) : array
|
||||
protected function processNotContains(QueryBuilder $queryBuilder, string $attribute, $value): array
|
||||
{
|
||||
return [
|
||||
$attribute . '!*' => '%' . $value . '%',
|
||||
];
|
||||
}
|
||||
|
||||
protected function processGreaterThan(QueryBuilder $queryBuilder, string $attribute, $value) : array
|
||||
protected function processGreaterThan(QueryBuilder $queryBuilder, string $attribute, $value): array
|
||||
{
|
||||
return [
|
||||
$attribute . '>' => $value,
|
||||
];
|
||||
}
|
||||
|
||||
protected function processAfter(QueryBuilder $queryBuilder, string $attribute, $value) : array
|
||||
protected function processAfter(QueryBuilder $queryBuilder, string $attribute, $value): array
|
||||
{
|
||||
return $this->processGreaterThan($queryBuilder, $attribute, $value);
|
||||
}
|
||||
|
||||
protected function processLessThan(QueryBuilder $queryBuilder, string $attribute, $value) : array
|
||||
protected function processLessThan(QueryBuilder $queryBuilder, string $attribute, $value): array
|
||||
{
|
||||
return [
|
||||
$attribute . '<' => $value,
|
||||
];
|
||||
}
|
||||
|
||||
protected function processBefore(QueryBuilder $queryBuilder, string $attribute, $value) : array
|
||||
protected function processBefore(QueryBuilder $queryBuilder, string $attribute, $value): array
|
||||
{
|
||||
return $this->processLessThan($queryBuilder, $attribute, $value);
|
||||
}
|
||||
|
||||
protected function processGreaterThanOrEquals(QueryBuilder $queryBuilder, string $attribute, $value) : array
|
||||
protected function processGreaterThanOrEquals(QueryBuilder $queryBuilder, string $attribute, $value): array
|
||||
{
|
||||
return [
|
||||
$attribute . '>=' => $value,
|
||||
];
|
||||
}
|
||||
|
||||
protected function processLessThanOrEquals(QueryBuilder $queryBuilder, string $attribute, $value) : array
|
||||
protected function processLessThanOrEquals(QueryBuilder $queryBuilder, string $attribute, $value): array
|
||||
{
|
||||
return [
|
||||
$attribute . '<=' => $value,
|
||||
];
|
||||
}
|
||||
|
||||
protected function processIn(QueryBuilder $queryBuilder, string $attribute, $value) : array
|
||||
protected function processIn(QueryBuilder $queryBuilder, string $attribute, $value): array
|
||||
{
|
||||
if (!is_array($value)) {
|
||||
throw new Error("Bad where item 'in'.");
|
||||
@@ -597,7 +612,7 @@ class ItemGeneralConverter
|
||||
];
|
||||
}
|
||||
|
||||
protected function processNotIn(QueryBuilder $queryBuilder, string $attribute, $value) : array
|
||||
protected function processNotIn(QueryBuilder $queryBuilder, string $attribute, $value): array
|
||||
{
|
||||
if (!is_array($value)) {
|
||||
throw new Error("Bad where item 'notIn'.");
|
||||
@@ -608,7 +623,7 @@ class ItemGeneralConverter
|
||||
];
|
||||
}
|
||||
|
||||
protected function processBetween(QueryBuilder $queryBuilder, string $attribute, $value) : array
|
||||
protected function processBetween(QueryBuilder $queryBuilder, string $attribute, $value): array
|
||||
{
|
||||
if (!is_array($value) || count($value) < 2) {
|
||||
throw new Error("Bad where item 'between'.");
|
||||
@@ -622,61 +637,61 @@ class ItemGeneralConverter
|
||||
];
|
||||
}
|
||||
|
||||
protected function processIsNull(QueryBuilder $queryBuilder, string $attribute, $value) : array
|
||||
protected function processIsNull(QueryBuilder $queryBuilder, string $attribute, $value): array
|
||||
{
|
||||
return [
|
||||
$attribute . '=' => null,
|
||||
];
|
||||
}
|
||||
|
||||
protected function processIsNotNull(QueryBuilder $queryBuilder, string $attribute, $value) : array
|
||||
protected function processIsNotNull(QueryBuilder $queryBuilder, string $attribute, $value): array
|
||||
{
|
||||
return [
|
||||
$attribute . '!=' => null,
|
||||
];
|
||||
}
|
||||
|
||||
protected function processEver(QueryBuilder $queryBuilder, string $attribute, $value) : array
|
||||
protected function processEver(QueryBuilder $queryBuilder, string $attribute, $value): array
|
||||
{
|
||||
return $this->processIsNotNull($queryBuilder, $attribute, $value);
|
||||
}
|
||||
|
||||
protected function processIsTrue(QueryBuilder $queryBuilder, string $attribute, $value) : array
|
||||
protected function processIsTrue(QueryBuilder $queryBuilder, string $attribute, $value): array
|
||||
{
|
||||
return [
|
||||
$attribute . '=' => true,
|
||||
];
|
||||
}
|
||||
|
||||
protected function processIsFalse(QueryBuilder $queryBuilder, string $attribute, $value) : array
|
||||
protected function processIsFalse(QueryBuilder $queryBuilder, string $attribute, $value): array
|
||||
{
|
||||
return [
|
||||
$attribute . '=' => false,
|
||||
];
|
||||
}
|
||||
|
||||
protected function processToday(QueryBuilder $queryBuilder, string $attribute, $value) : array
|
||||
protected function processToday(QueryBuilder $queryBuilder, string $attribute, $value): array
|
||||
{
|
||||
return [
|
||||
$attribute . '=' => date('Y-m-d'),
|
||||
];
|
||||
}
|
||||
|
||||
protected function processPast(QueryBuilder $queryBuilder, string $attribute, $value) : array
|
||||
protected function processPast(QueryBuilder $queryBuilder, string $attribute, $value): array
|
||||
{
|
||||
return [
|
||||
$attribute . '<' => date('Y-m-d'),
|
||||
];
|
||||
}
|
||||
|
||||
protected function processFuture(QueryBuilder $queryBuilder, string $attribute, $value) : array
|
||||
protected function processFuture(QueryBuilder $queryBuilder, string $attribute, $value): array
|
||||
{
|
||||
return [
|
||||
$attribute . '>' => date('Y-m-d'),
|
||||
];
|
||||
}
|
||||
|
||||
protected function processLastSevenDays(QueryBuilder $queryBuilder, string $attribute, $value) : array
|
||||
protected function processLastSevenDays(QueryBuilder $queryBuilder, string $attribute, $value): array
|
||||
{
|
||||
$dt1 = new DateTime();
|
||||
|
||||
@@ -692,7 +707,7 @@ class ItemGeneralConverter
|
||||
];
|
||||
}
|
||||
|
||||
protected function processLastXDays(QueryBuilder $queryBuilder, string $attribute, $value) : array
|
||||
protected function processLastXDays(QueryBuilder $queryBuilder, string $attribute, $value): array
|
||||
{
|
||||
$dt1 = new DateTime();
|
||||
|
||||
@@ -710,7 +725,7 @@ class ItemGeneralConverter
|
||||
];
|
||||
}
|
||||
|
||||
protected function processNextXDays(QueryBuilder $queryBuilder, string $attribute, $value) : array
|
||||
protected function processNextXDays(QueryBuilder $queryBuilder, string $attribute, $value): array
|
||||
{
|
||||
$dt1 = new DateTime();
|
||||
|
||||
@@ -728,7 +743,7 @@ class ItemGeneralConverter
|
||||
];
|
||||
}
|
||||
|
||||
protected function processOlderThanXDays(QueryBuilder $queryBuilder, string $attribute, $value) : array
|
||||
protected function processOlderThanXDays(QueryBuilder $queryBuilder, string $attribute, $value): array
|
||||
{
|
||||
$dt = new DateTime();
|
||||
|
||||
@@ -741,7 +756,7 @@ class ItemGeneralConverter
|
||||
];
|
||||
}
|
||||
|
||||
protected function processAfterXDays(QueryBuilder $queryBuilder, string $attribute, $value) : array
|
||||
protected function processAfterXDays(QueryBuilder $queryBuilder, string $attribute, $value): array
|
||||
{
|
||||
$dt = new DateTime();
|
||||
|
||||
@@ -754,7 +769,7 @@ class ItemGeneralConverter
|
||||
];
|
||||
}
|
||||
|
||||
protected function processCurrentMonth(QueryBuilder $queryBuilder, string $attribute, $value) : array
|
||||
protected function processCurrentMonth(QueryBuilder $queryBuilder, string $attribute, $value): array
|
||||
{
|
||||
$dt = new DateTime();
|
||||
|
||||
@@ -766,7 +781,7 @@ class ItemGeneralConverter
|
||||
];
|
||||
}
|
||||
|
||||
protected function processLastMonth(QueryBuilder $queryBuilder, string $attribute, $value) : array
|
||||
protected function processLastMonth(QueryBuilder $queryBuilder, string $attribute, $value): array
|
||||
{
|
||||
$dt = new DateTime();
|
||||
|
||||
@@ -778,7 +793,7 @@ class ItemGeneralConverter
|
||||
];
|
||||
}
|
||||
|
||||
protected function processNextMonth(QueryBuilder $queryBuilder, string $attribute, $value) : array
|
||||
protected function processNextMonth(QueryBuilder $queryBuilder, string $attribute, $value): array
|
||||
{
|
||||
$dt = new DateTime();
|
||||
|
||||
@@ -790,7 +805,7 @@ class ItemGeneralConverter
|
||||
];
|
||||
}
|
||||
|
||||
protected function processCurrentQuarter(QueryBuilder $queryBuilder, string $attribute, $value) : array
|
||||
protected function processCurrentQuarter(QueryBuilder $queryBuilder, string $attribute, $value): array
|
||||
{
|
||||
$dt = new DateTime();
|
||||
|
||||
@@ -806,7 +821,7 @@ class ItemGeneralConverter
|
||||
];
|
||||
}
|
||||
|
||||
protected function processLastQuarter(QueryBuilder $queryBuilder, string $attribute, $value) : array
|
||||
protected function processLastQuarter(QueryBuilder $queryBuilder, string $attribute, $value): array
|
||||
{
|
||||
$dt = new DateTime();
|
||||
|
||||
@@ -829,7 +844,7 @@ class ItemGeneralConverter
|
||||
];
|
||||
}
|
||||
|
||||
protected function processCurrentYear(QueryBuilder $queryBuilder, string $attribute, $value) : array
|
||||
protected function processCurrentYear(QueryBuilder $queryBuilder, string $attribute, $value): array
|
||||
{
|
||||
$dt = new DateTime();
|
||||
|
||||
@@ -841,7 +856,7 @@ class ItemGeneralConverter
|
||||
];
|
||||
}
|
||||
|
||||
protected function processLastYear(QueryBuilder $queryBuilder, string $attribute, $value) : array
|
||||
protected function processLastYear(QueryBuilder $queryBuilder, string $attribute, $value): array
|
||||
{
|
||||
$dt = new DateTime();
|
||||
|
||||
@@ -853,7 +868,7 @@ class ItemGeneralConverter
|
||||
];
|
||||
}
|
||||
|
||||
protected function processCurrentFiscalYear(QueryBuilder $queryBuilder, string $attribute, $value) : array
|
||||
protected function processCurrentFiscalYear(QueryBuilder $queryBuilder, string $attribute, $value): array
|
||||
{
|
||||
$dtToday = new DateTime();
|
||||
$dt = new DateTime();
|
||||
@@ -874,7 +889,7 @@ class ItemGeneralConverter
|
||||
];
|
||||
}
|
||||
|
||||
protected function processLastFiscalYear(QueryBuilder $queryBuilder, string $attribute, $value) : array
|
||||
protected function processLastFiscalYear(QueryBuilder $queryBuilder, string $attribute, $value): array
|
||||
{
|
||||
$dtToday = new DateTime();
|
||||
$dt = new DateTime();
|
||||
@@ -897,7 +912,7 @@ class ItemGeneralConverter
|
||||
];
|
||||
}
|
||||
|
||||
protected function processCurrentFiscalQuarter(QueryBuilder $queryBuilder, string $attribute, $value) : array
|
||||
protected function processCurrentFiscalQuarter(QueryBuilder $queryBuilder, string $attribute, $value): array
|
||||
{
|
||||
$dtToday = new DateTime();
|
||||
$dt = new DateTime();
|
||||
@@ -927,7 +942,7 @@ class ItemGeneralConverter
|
||||
];
|
||||
}
|
||||
|
||||
protected function processLastFiscalQuarter(QueryBuilder $queryBuilder, string $attribute, $value) : array
|
||||
protected function processLastFiscalQuarter(QueryBuilder $queryBuilder, string $attribute, $value): array
|
||||
{
|
||||
$dtToday = new DateTime();
|
||||
$dt = new DateTime();
|
||||
@@ -959,7 +974,7 @@ class ItemGeneralConverter
|
||||
];
|
||||
}
|
||||
|
||||
protected function processIsNotLinked(QueryBuilder $queryBuilder, string $attribute, $value) : array
|
||||
protected function processIsNotLinked(QueryBuilder $queryBuilder, string $attribute, $value): array
|
||||
{
|
||||
return [
|
||||
'id!=s' => [
|
||||
@@ -970,7 +985,7 @@ class ItemGeneralConverter
|
||||
];
|
||||
}
|
||||
|
||||
protected function processIsLinked(QueryBuilder $queryBuilder, string $attribute, $value) : array
|
||||
protected function processIsLinked(QueryBuilder $queryBuilder, string $attribute, $value): array
|
||||
{
|
||||
$link = $attribute;
|
||||
|
||||
@@ -985,7 +1000,7 @@ class ItemGeneralConverter
|
||||
];
|
||||
}
|
||||
|
||||
protected function processLinkedWith(QueryBuilder $queryBuilder, string $attribute, $value) : array
|
||||
protected function processLinkedWith(QueryBuilder $queryBuilder, string $attribute, $value): array
|
||||
{
|
||||
$link = $attribute;
|
||||
|
||||
@@ -1047,7 +1062,7 @@ class ItemGeneralConverter
|
||||
throw new Error("Bad where item. Not supported relation type.");
|
||||
}
|
||||
|
||||
protected function processNotLinkedWith(QueryBuilder $queryBuilder, string $attribute, $value) : array
|
||||
protected function processNotLinkedWith(QueryBuilder $queryBuilder, string $attribute, $value): array
|
||||
{
|
||||
$link = $attribute;
|
||||
|
||||
|
||||
+1
-1
@@ -39,7 +39,7 @@ use Espo\Core\{
|
||||
*/
|
||||
class DateTimeItemTransformer extends DateTimeItemTransformerOriginal
|
||||
{
|
||||
public function transform(Item $item) : Item
|
||||
public function transform(Item $item): Item
|
||||
{
|
||||
$type = $item->getType();
|
||||
$value = $item->getValue();
|
||||
|
||||
@@ -34,8 +34,12 @@ use Espo\Core\{
|
||||
Select\Where\Converter,
|
||||
Select\Where\DateTimeItemTransformer,
|
||||
Select\Where\ItemGeneralConverter,
|
||||
Select\Where\ItemConverter,
|
||||
Utils\Metadata,
|
||||
InjectableFactory,
|
||||
Binding\BindingContainer,
|
||||
Binding\Binder,
|
||||
Binding\BindingData,
|
||||
};
|
||||
|
||||
use Espo\{
|
||||
@@ -44,7 +48,7 @@ use Espo\{
|
||||
|
||||
class ConverterFactoryTest extends \PHPUnit\Framework\TestCase
|
||||
{
|
||||
protected function setUp() : void
|
||||
protected function setUp(): void
|
||||
{
|
||||
$this->injectableFactory = $this->createMock(InjectableFactory::class);
|
||||
$this->metadata = $this->createMock(Metadata::class);
|
||||
@@ -88,32 +92,69 @@ class ConverterFactoryTest extends \PHPUnit\Framework\TestCase
|
||||
|
||||
$object = $this->createMock(Converter::class);
|
||||
|
||||
$bindingData1 = new BindingData();
|
||||
|
||||
$binder1 = new Binder($bindingData1);
|
||||
|
||||
$binder1
|
||||
->bindInstance(User::class, $this->user);
|
||||
|
||||
$binder1
|
||||
->for($className1)
|
||||
->bindValue('$entityType', $entityType);
|
||||
|
||||
$binder1
|
||||
->for(DateTimeItemTransformer::class)
|
||||
->bindValue('$entityType', $entityType);
|
||||
|
||||
$bindingContainer1 = new BindingContainer($bindingData1);
|
||||
|
||||
$bindingData2 = new BindingData();
|
||||
|
||||
$binder2 = new Binder($bindingData2);
|
||||
|
||||
$binder2
|
||||
->bindInstance(User::class, $this->user);
|
||||
|
||||
$binder2
|
||||
->for($className2)
|
||||
->bindValue('$entityType', $entityType)
|
||||
->bindInstance(DateTimeItemTransformer::class, $this->dateTimeItemTransformer);
|
||||
|
||||
$binder2
|
||||
->for(ItemGeneralConverter::class)
|
||||
->bindValue('$entityType', $entityType)
|
||||
->bindInstance(DateTimeItemTransformer::class, $this->dateTimeItemTransformer);
|
||||
|
||||
$bindingContainer2 = new BindingContainer($bindingData2);
|
||||
|
||||
$bindingData3 = new BindingData();
|
||||
|
||||
$binder3 = new Binder($bindingData3);
|
||||
|
||||
$binder3
|
||||
->bindInstance(User::class, $this->user)
|
||||
->for($className3)
|
||||
->bindValue('$entityType', $entityType)
|
||||
->bindInstance(ItemConverter::class, $this->itemConverter);
|
||||
|
||||
$bindingContainer = new BindingContainer($bindingData3);
|
||||
|
||||
$this->injectableFactory
|
||||
->expects($this->exactly(3))
|
||||
->method('createWith')
|
||||
->method('createWithBinding')
|
||||
->withConsecutive(
|
||||
[
|
||||
$className1,
|
||||
[
|
||||
'entityType' => $entityType,
|
||||
'user' => $this->user,
|
||||
]
|
||||
$bindingContainer1,
|
||||
],
|
||||
[
|
||||
$className2,
|
||||
[
|
||||
'entityType' => $entityType,
|
||||
'user' => $this->user,
|
||||
'dateTimeItemTransformer' => $this->dateTimeItemTransformer,
|
||||
]
|
||||
$bindingContainer2,
|
||||
],
|
||||
[
|
||||
$className3,
|
||||
[
|
||||
'entityType' => $entityType,
|
||||
'user' => $this->user,
|
||||
'itemConverter' => $this->itemConverter,
|
||||
]
|
||||
$bindingContainer,
|
||||
]
|
||||
)
|
||||
->willReturnOnConsecutiveCalls(
|
||||
|
||||
@@ -33,6 +33,9 @@ use Espo\Core\{
|
||||
Select\Where\ItemConverterFactory,
|
||||
Utils\Metadata,
|
||||
InjectableFactory,
|
||||
Binding\BindingContainer,
|
||||
Binding\Binder,
|
||||
Binding\BindingData,
|
||||
};
|
||||
|
||||
use Espo\{
|
||||
@@ -45,7 +48,7 @@ class ItemConverterFactoryTest extends \PHPUnit\Framework\TestCase
|
||||
{
|
||||
private $metadata;
|
||||
|
||||
protected function setUp() : void
|
||||
protected function setUp(): void
|
||||
{
|
||||
$this->injectableFactory = $this->createMock(InjectableFactory::class);
|
||||
$this->metadata = $this->createMock(Metadata::class);
|
||||
@@ -108,15 +111,25 @@ class ItemConverterFactoryTest extends \PHPUnit\Framework\TestCase
|
||||
|
||||
$object = $this->createMock($className);
|
||||
|
||||
$bindingData = new BindingData();
|
||||
|
||||
$binder = new Binder($bindingData);
|
||||
|
||||
$binder
|
||||
->bindInstance(User::class, $this->user);
|
||||
|
||||
$binder
|
||||
->for($className)
|
||||
->bindValue('$entityType', $entityType);
|
||||
|
||||
$bindingContainer = new BindingContainer($bindingData);
|
||||
|
||||
$this->injectableFactory
|
||||
->expects($this->once())
|
||||
->method('createWith')
|
||||
->method('createWithBinding')
|
||||
->with(
|
||||
$className,
|
||||
[
|
||||
'entityType' => $entityType,
|
||||
'user' => $this->user,
|
||||
]
|
||||
$bindingContainer
|
||||
)
|
||||
->willReturn($object);
|
||||
|
||||
@@ -159,15 +172,25 @@ class ItemConverterFactoryTest extends \PHPUnit\Framework\TestCase
|
||||
|
||||
$object = $this->createMock($className);
|
||||
|
||||
$bindingData = new BindingData();
|
||||
|
||||
$binder = new Binder($bindingData);
|
||||
|
||||
$binder
|
||||
->bindInstance(User::class, $this->user);
|
||||
|
||||
$binder
|
||||
->for($className)
|
||||
->bindValue('$entityType', $entityType);
|
||||
|
||||
$bindingContainer = new BindingContainer($bindingData);
|
||||
|
||||
$this->injectableFactory
|
||||
->expects($this->once())
|
||||
->method('createWith')
|
||||
->method('createWithBinding')
|
||||
->with(
|
||||
$className,
|
||||
[
|
||||
'entityType' => $entityType,
|
||||
'user' => $this->user,
|
||||
]
|
||||
$bindingContainer
|
||||
)
|
||||
->willReturn($object);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user