From f0a0398c9a159cca2502ce8638d4800b02ceb537 Mon Sep 17 00:00:00 2001 From: Mateusz Bieniek Date: Fri, 11 Oct 2019 16:23:50 +0200 Subject: [PATCH 01/11] Added missing features for Empty and Null field values --- .../ContentDocumentEmptyFields.php | 93 ++++++++++++++++++ .../ContentDocumentNullFields.php | 91 ++++++++++++++++++ .../CriterionVisitor/Field/FieldEmpty.php | 96 +++++++++++++++++++ .../Common/CriterionVisitor/Field/FieldIn.php | 54 +++++++++-- .../container/solr/criterion_visitors.yml | 12 +++ .../config/container/solr/field_mappers.yml | 18 ++++ 6 files changed, 355 insertions(+), 9 deletions(-) create mode 100644 lib/FieldMapper/ContentTranslationFieldMapper/ContentDocumentEmptyFields.php create mode 100644 lib/FieldMapper/ContentTranslationFieldMapper/ContentDocumentNullFields.php create mode 100644 lib/Query/Common/CriterionVisitor/Field/FieldEmpty.php diff --git a/lib/FieldMapper/ContentTranslationFieldMapper/ContentDocumentEmptyFields.php b/lib/FieldMapper/ContentTranslationFieldMapper/ContentDocumentEmptyFields.php new file mode 100644 index 000000000..15c2e6f81 --- /dev/null +++ b/lib/FieldMapper/ContentTranslationFieldMapper/ContentDocumentEmptyFields.php @@ -0,0 +1,93 @@ +contentTypeHandler = $contentTypeHandler; + $this->fieldNameGenerator = $fieldNameGenerator; + $this->fieldTypeRegistry = $fieldTypeRegistry; + } + + public function accept(Content $content, $languageCode) + { + return true; + } + + public function mapFields(Content $content, $languageCode) + { + $fields = []; + $contentType = $this->contentTypeHandler->load( + $content->versionInfo->contentInfo->contentTypeId + ); + + foreach ($content->fields as $field) { + if ($field->languageCode !== $languageCode) { + continue; + } + + foreach ($contentType->fieldDefinitions as $fieldDefinition) { + if ($fieldDefinition->id !== $field->fieldDefinitionId) { + continue; + } + if ($fieldDefinition->isRequired) { + continue; + } + + /** @var \eZ\Publish\Core\Persistence\FieldType $fieldType */ + $fieldType = $this->fieldTypeRegistry->getFieldType($fieldDefinition->fieldType); + $fields[] = new Field( + $name = $this->fieldNameGenerator->getName( + self::IS_EMPTY_NAME, + $fieldDefinition->identifier + ), + ($fieldType->getEmptyValue() == $field->value), + new FieldType\BooleanField() + ); + } + } + + return $fields; + } +} diff --git a/lib/FieldMapper/ContentTranslationFieldMapper/ContentDocumentNullFields.php b/lib/FieldMapper/ContentTranslationFieldMapper/ContentDocumentNullFields.php new file mode 100644 index 000000000..aa7ebf21a --- /dev/null +++ b/lib/FieldMapper/ContentTranslationFieldMapper/ContentDocumentNullFields.php @@ -0,0 +1,91 @@ +contentTypeHandler = $contentTypeHandler; + $this->fieldNameGenerator = $fieldNameGenerator; + $this->fieldTypeRegistry = $fieldTypeRegistry; + } + + public function accept(Content $content, $languageCode) + { + return true; + } + + public function mapFields(Content $content, $languageCode) + { + $fields = []; + $contentType = $this->contentTypeHandler->load( + $content->versionInfo->contentInfo->contentTypeId + ); + + foreach ($content->fields as $field) { + if ($field->languageCode !== $languageCode) { + continue; + } + + foreach ($contentType->fieldDefinitions as $fieldDefinition) { + if ($fieldDefinition->id !== $field->fieldDefinitionId) { + continue; + } + if ($fieldDefinition->isRequired) { + continue; + } + + $fields[] = new Field( + $name = $this->fieldNameGenerator->getName( + self::IS_NULL_NAME, + $fieldDefinition->identifier + ), + (null == $field->value->data), + new FieldType\BooleanField() + ); + } + } + + return $fields; + } +} diff --git a/lib/Query/Common/CriterionVisitor/Field/FieldEmpty.php b/lib/Query/Common/CriterionVisitor/Field/FieldEmpty.php new file mode 100644 index 000000000..351741e37 --- /dev/null +++ b/lib/Query/Common/CriterionVisitor/Field/FieldEmpty.php @@ -0,0 +1,96 @@ +fieldNameGenerator = $fieldNameGenerator; + } + + /** + * Check if visitor is applicable to current criterion. + * + * @param Criterion $criterion + * + * @return bool + */ + public function canVisit(Criterion $criterion) + { + return $criterion instanceof Criterion\IsFieldEmpty && Operator::EQ; + } + + /** + * Map field value to a proper Solr representation. + * + * @throws \eZ\Publish\Core\Base\Exceptions\InvalidArgumentException If no searchable fields are found for the given criterion target. + * + * @param \eZ\Publish\API\Repository\Values\Content\Query\Criterion $criterion + * @param \EzSystems\EzPlatformSolrSearchEngine\Query\CriterionVisitor $subVisitor + * + * @return string + */ + public function visit(Criterion $criterion, CriterionVisitor $subVisitor = null) + { + $searchFields = $this->getSearchFields($criterion); + + if (empty($searchFields)) { + throw new InvalidArgumentException( + '$criterion->target', + "No searchable fields found for the given criterion target '{$criterion->target}'." + ); + } + + $criterion->value = (array)$criterion->value; + $queries = array(); + + foreach ($searchFields as $name => $fieldType) { + foreach ($criterion->value as $value) { + $name = $this->fieldNameGenerator->getTypedName( + $this->fieldNameGenerator->getName( + ContentDocumentEmptyFields::IS_EMPTY_NAME, + $criterion->target + ), + new BooleanField() + ); + $queries[] = $name . ':' . $value; + } + } + + return '(' . implode(' OR ', $queries) . ')'; + } +} diff --git a/lib/Query/Common/CriterionVisitor/Field/FieldIn.php b/lib/Query/Common/CriterionVisitor/Field/FieldIn.php index 85e4e504c..0a6989668 100644 --- a/lib/Query/Common/CriterionVisitor/Field/FieldIn.php +++ b/lib/Query/Common/CriterionVisitor/Field/FieldIn.php @@ -8,17 +8,39 @@ */ namespace EzSystems\EzPlatformSolrSearchEngine\Query\Common\CriterionVisitor\Field; +use eZ\Publish\SPI\Search\FieldType\BooleanField; +use EzSystems\EzPlatformSolrSearchEngine\FieldMapper\ContentTranslationFieldMapper\ContentDocumentNullFields; use EzSystems\EzPlatformSolrSearchEngine\Query\CriterionVisitor; use EzSystems\EzPlatformSolrSearchEngine\Query\Common\CriterionVisitor\Field; use eZ\Publish\API\Repository\Values\Content\Query\Criterion; use eZ\Publish\API\Repository\Values\Content\Query\Criterion\Operator; use eZ\Publish\Core\Base\Exceptions\InvalidArgumentException; +use eZ\Publish\Core\Search\Common\FieldValueMapper; +use eZ\Publish\Core\Search\Common\FieldNameResolver; +use eZ\Publish\Core\Search\Common\FieldNameGenerator; /** * Visits the Field criterion. */ class FieldIn extends Field { + /** + * @var \eZ\Publish\Core\Search\Common\FieldNameGenerator + */ + private $fieldNameGenerator; + + /** + * @param \eZ\Publish\Core\Search\Common\FieldNameResolver $fieldNameResolver + * @param \eZ\Publish\Core\Search\Common\FieldValueMapper $fieldValueMapper + * @param \eZ\Publish\Core\Search\Common\FieldNameGenerator $fieldNameGenerator + */ + public function __construct(FieldNameResolver $fieldNameResolver, FieldValueMapper $fieldValueMapper, FieldNameGenerator $fieldNameGenerator) + { + parent::__construct($fieldNameResolver, $fieldValueMapper); + + $this->fieldNameGenerator = $fieldNameGenerator; + } + /** * Check if visitor is applicable to current criterion. * @@ -56,19 +78,33 @@ public function visit(Criterion $criterion, CriterionVisitor $subVisitor = null) ); } - $criterion->value = (array)$criterion->value; + if ($criterion->value === null) { + $criterion->value[] = null; + } else { + $criterion->value = (array)$criterion->value; + } $queries = array(); foreach ($searchFields as $name => $fieldType) { foreach ($criterion->value as $value) { - $preparedValue = $this->escapeQuote( - $this->toString( - $this->mapSearchFieldValue($value, $fieldType) - ), - true - ); - - $queries[] = $name . ':"' . $preparedValue . '"'; + if ($value === null) { + $name = $this->fieldNameGenerator->getTypedName( + $this->fieldNameGenerator->getName( + ContentDocumentNullFields::IS_NULL_NAME, + $criterion->target + ), + new BooleanField() + ); + $queries[] = $name . ':true'; + } else { + $preparedValue = $this->escapeQuote( + $this->toString( + $this->mapSearchFieldValue($value, $fieldType) + ), + true + ); + $queries[] = $name . ':"' . $preparedValue . '"'; + } } } diff --git a/lib/Resources/config/container/solr/criterion_visitors.yml b/lib/Resources/config/container/solr/criterion_visitors.yml index 32791d2b1..6e01d76c6 100644 --- a/lib/Resources/config/container/solr/criterion_visitors.yml +++ b/lib/Resources/config/container/solr/criterion_visitors.yml @@ -7,6 +7,7 @@ parameters: ezpublish.search.solr.query.common.criterion_visitor.custom_field_in.class: EzSystems\EzPlatformSolrSearchEngine\Query\Common\CriterionVisitor\CustomField\CustomFieldIn ezpublish.search.solr.query.common.criterion_visitor.custom_field_range.class: EzSystems\EzPlatformSolrSearchEngine\Query\Common\CriterionVisitor\CustomField\CustomFieldRange ezpublish.search.solr.query.common.criterion_visitor.field_in.class: EzSystems\EzPlatformSolrSearchEngine\Query\Common\CriterionVisitor\Field\FieldIn + ezpublish.search.solr.query.common.criterion_visitor.field_empty.class: EzSystems\EzPlatformSolrSearchEngine\Query\Common\CriterionVisitor\Field\FieldEmpty ezpublish.search.solr.query.common.criterion_visitor.field_range.class: EzSystems\EzPlatformSolrSearchEngine\Query\Common\CriterionVisitor\Field\FieldRange ezpublish.search.solr.query.common.criterion_visitor.field_like.class: EzSystems\EzPlatformSolrSearchEngine\Query\Common\CriterionVisitor\Field\FieldLike ezpublish.search.solr.query.common.criterion_visitor.field_relation.class: EzSystems\EzPlatformSolrSearchEngine\Query\Common\CriterionVisitor\Field\FieldRelation @@ -104,6 +105,17 @@ services: arguments: - "@ezpublish.search.common.field_name_resolver" - "@ezpublish.search.common.field_value_mapper.aggregate" + - "@ezpublish.search.common.field_name_generator" + tags: + - {name: ezpublish.search.solr.query.content.criterion_visitor} + - {name: ezpublish.search.solr.query.location.criterion_visitor} + + ezpublish.search.solr.query.common.criterion_visitor.field_empty: + class: "%ezpublish.search.solr.query.common.criterion_visitor.field_empty.class%" + arguments: + - "@ezpublish.search.common.field_name_resolver" + - "@ezpublish.search.common.field_value_mapper.aggregate" + - "@ezpublish.search.common.field_name_generator" tags: - {name: ezpublish.search.solr.query.content.criterion_visitor} - {name: ezpublish.search.solr.query.location.criterion_visitor} diff --git a/lib/Resources/config/container/solr/field_mappers.yml b/lib/Resources/config/container/solr/field_mappers.yml index bd9ee844a..5c74069e9 100644 --- a/lib/Resources/config/container/solr/field_mappers.yml +++ b/lib/Resources/config/container/solr/field_mappers.yml @@ -72,3 +72,21 @@ services: - '@ezpublish.spi.persistence.content_handler' tags: - {name: ezpublish.search.solr.field_mapper.location} + + ezpublish.search.solr.field_mapper.content_translation.content_document_null_fields: + class: EzSystems\EzPlatformSolrSearchEngine\FieldMapper\ContentTranslationFieldMapper\ContentDocumentNullFields + arguments: + - '@ezpublish.spi.persistence.content_type_handler' + - '@ezpublish.search.common.field_name_generator' + - '@ezpublish.persistence.field_type_registry' + tags: + - {name: ezpublish.search.solr.field_mapper.content_translation} + + ezpublish.search.solr.field_mapper.content_translation.content_document_empty_fields: + class: EzSystems\EzPlatformSolrSearchEngine\FieldMapper\ContentTranslationFieldMapper\ContentDocumentEmptyFields + arguments: + - '@ezpublish.spi.persistence.content_type_handler' + - '@ezpublish.search.common.field_name_generator' + - '@ezpublish.persistence.field_type_registry' + tags: + - {name: ezpublish.search.solr.field_mapper.content_translation} From baba54fa025416363dafa02c0df0c60bbf69f0cd Mon Sep 17 00:00:00 2001 From: Mateusz Bieniek Date: Mon, 14 Oct 2019 11:11:06 +0200 Subject: [PATCH 02/11] Fixups after CR --- .../ContentDocumentNullFields.php | 6 +++--- lib/Query/Common/CriterionVisitor/Field/FieldEmpty.php | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/FieldMapper/ContentTranslationFieldMapper/ContentDocumentNullFields.php b/lib/FieldMapper/ContentTranslationFieldMapper/ContentDocumentNullFields.php index aa7ebf21a..8075d5394 100644 --- a/lib/FieldMapper/ContentTranslationFieldMapper/ContentDocumentNullFields.php +++ b/lib/FieldMapper/ContentTranslationFieldMapper/ContentDocumentNullFields.php @@ -68,10 +68,10 @@ public function mapFields(Content $content, $languageCode) } foreach ($contentType->fieldDefinitions as $fieldDefinition) { - if ($fieldDefinition->id !== $field->fieldDefinitionId) { + if ($fieldDefinition->isRequired) { continue; } - if ($fieldDefinition->isRequired) { + if ($fieldDefinition->id !== $field->fieldDefinitionId) { continue; } @@ -80,7 +80,7 @@ public function mapFields(Content $content, $languageCode) self::IS_NULL_NAME, $fieldDefinition->identifier ), - (null == $field->value->data), + (null === $field->value->data), new FieldType\BooleanField() ); } diff --git a/lib/Query/Common/CriterionVisitor/Field/FieldEmpty.php b/lib/Query/Common/CriterionVisitor/Field/FieldEmpty.php index 351741e37..2acbdb39d 100644 --- a/lib/Query/Common/CriterionVisitor/Field/FieldEmpty.php +++ b/lib/Query/Common/CriterionVisitor/Field/FieldEmpty.php @@ -76,7 +76,7 @@ public function visit(Criterion $criterion, CriterionVisitor $subVisitor = null) } $criterion->value = (array)$criterion->value; - $queries = array(); + $queries = []; foreach ($searchFields as $name => $fieldType) { foreach ($criterion->value as $value) { From 39b80b933115d649f6d51e91ed825c62e7c6e8b4 Mon Sep 17 00:00:00 2001 From: Mateusz Bieniek Date: Wed, 16 Oct 2019 14:35:42 +0200 Subject: [PATCH 03/11] fixups --- .../ContentDocumentNullFields.php | 10 ++++++++++ lib/Query/Common/CriterionVisitor/Field/FieldEmpty.php | 1 - 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/lib/FieldMapper/ContentTranslationFieldMapper/ContentDocumentNullFields.php b/lib/FieldMapper/ContentTranslationFieldMapper/ContentDocumentNullFields.php index 8075d5394..5a71aa9b8 100644 --- a/lib/FieldMapper/ContentTranslationFieldMapper/ContentDocumentNullFields.php +++ b/lib/FieldMapper/ContentTranslationFieldMapper/ContentDocumentNullFields.php @@ -50,11 +50,21 @@ public function __construct( $this->fieldTypeRegistry = $fieldTypeRegistry; } + /** + * @param \eZ\Publish\SPI\Persistence\Content $content + * @param string $languageCode + * @return bool + */ public function accept(Content $content, $languageCode) { return true; } + /** + * @param \eZ\Publish\SPI\Persistence\Content $content + * @param string $languageCode + * @return \eZ\Publish\SPI\Search\Field[] + */ public function mapFields(Content $content, $languageCode) { $fields = []; diff --git a/lib/Query/Common/CriterionVisitor/Field/FieldEmpty.php b/lib/Query/Common/CriterionVisitor/Field/FieldEmpty.php index 2acbdb39d..0975ba6bd 100644 --- a/lib/Query/Common/CriterionVisitor/Field/FieldEmpty.php +++ b/lib/Query/Common/CriterionVisitor/Field/FieldEmpty.php @@ -10,7 +10,6 @@ use eZ\Publish\SPI\Search\FieldType\BooleanField; use EzSystems\EzPlatformSolrSearchEngine\FieldMapper\ContentTranslationFieldMapper\ContentDocumentEmptyFields; -use EzSystems\EzPlatformSolrSearchEngine\FieldMapper\ContentTranslationFieldMapper\ContentDocumentNullFields; use EzSystems\EzPlatformSolrSearchEngine\Query\CriterionVisitor; use EzSystems\EzPlatformSolrSearchEngine\Query\Common\CriterionVisitor\Field; use eZ\Publish\API\Repository\Values\Content\Query\Criterion; From f7c78d22df6130f4f376676057760e7bff0a276d Mon Sep 17 00:00:00 2001 From: Mateusz Bieniek Date: Thu, 17 Oct 2019 09:12:19 +0200 Subject: [PATCH 04/11] Removed changes for Null Searching --- .../ContentDocumentNullFields.php | 101 ------------------ .../Common/CriterionVisitor/Field/FieldIn.php | 54 ++-------- .../container/solr/criterion_visitors.yml | 1 - .../config/container/solr/field_mappers.yml | 9 -- 4 files changed, 9 insertions(+), 156 deletions(-) delete mode 100644 lib/FieldMapper/ContentTranslationFieldMapper/ContentDocumentNullFields.php diff --git a/lib/FieldMapper/ContentTranslationFieldMapper/ContentDocumentNullFields.php b/lib/FieldMapper/ContentTranslationFieldMapper/ContentDocumentNullFields.php deleted file mode 100644 index 5a71aa9b8..000000000 --- a/lib/FieldMapper/ContentTranslationFieldMapper/ContentDocumentNullFields.php +++ /dev/null @@ -1,101 +0,0 @@ -contentTypeHandler = $contentTypeHandler; - $this->fieldNameGenerator = $fieldNameGenerator; - $this->fieldTypeRegistry = $fieldTypeRegistry; - } - - /** - * @param \eZ\Publish\SPI\Persistence\Content $content - * @param string $languageCode - * @return bool - */ - public function accept(Content $content, $languageCode) - { - return true; - } - - /** - * @param \eZ\Publish\SPI\Persistence\Content $content - * @param string $languageCode - * @return \eZ\Publish\SPI\Search\Field[] - */ - public function mapFields(Content $content, $languageCode) - { - $fields = []; - $contentType = $this->contentTypeHandler->load( - $content->versionInfo->contentInfo->contentTypeId - ); - - foreach ($content->fields as $field) { - if ($field->languageCode !== $languageCode) { - continue; - } - - foreach ($contentType->fieldDefinitions as $fieldDefinition) { - if ($fieldDefinition->isRequired) { - continue; - } - if ($fieldDefinition->id !== $field->fieldDefinitionId) { - continue; - } - - $fields[] = new Field( - $name = $this->fieldNameGenerator->getName( - self::IS_NULL_NAME, - $fieldDefinition->identifier - ), - (null === $field->value->data), - new FieldType\BooleanField() - ); - } - } - - return $fields; - } -} diff --git a/lib/Query/Common/CriterionVisitor/Field/FieldIn.php b/lib/Query/Common/CriterionVisitor/Field/FieldIn.php index 0a6989668..85e4e504c 100644 --- a/lib/Query/Common/CriterionVisitor/Field/FieldIn.php +++ b/lib/Query/Common/CriterionVisitor/Field/FieldIn.php @@ -8,39 +8,17 @@ */ namespace EzSystems\EzPlatformSolrSearchEngine\Query\Common\CriterionVisitor\Field; -use eZ\Publish\SPI\Search\FieldType\BooleanField; -use EzSystems\EzPlatformSolrSearchEngine\FieldMapper\ContentTranslationFieldMapper\ContentDocumentNullFields; use EzSystems\EzPlatformSolrSearchEngine\Query\CriterionVisitor; use EzSystems\EzPlatformSolrSearchEngine\Query\Common\CriterionVisitor\Field; use eZ\Publish\API\Repository\Values\Content\Query\Criterion; use eZ\Publish\API\Repository\Values\Content\Query\Criterion\Operator; use eZ\Publish\Core\Base\Exceptions\InvalidArgumentException; -use eZ\Publish\Core\Search\Common\FieldValueMapper; -use eZ\Publish\Core\Search\Common\FieldNameResolver; -use eZ\Publish\Core\Search\Common\FieldNameGenerator; /** * Visits the Field criterion. */ class FieldIn extends Field { - /** - * @var \eZ\Publish\Core\Search\Common\FieldNameGenerator - */ - private $fieldNameGenerator; - - /** - * @param \eZ\Publish\Core\Search\Common\FieldNameResolver $fieldNameResolver - * @param \eZ\Publish\Core\Search\Common\FieldValueMapper $fieldValueMapper - * @param \eZ\Publish\Core\Search\Common\FieldNameGenerator $fieldNameGenerator - */ - public function __construct(FieldNameResolver $fieldNameResolver, FieldValueMapper $fieldValueMapper, FieldNameGenerator $fieldNameGenerator) - { - parent::__construct($fieldNameResolver, $fieldValueMapper); - - $this->fieldNameGenerator = $fieldNameGenerator; - } - /** * Check if visitor is applicable to current criterion. * @@ -78,33 +56,19 @@ public function visit(Criterion $criterion, CriterionVisitor $subVisitor = null) ); } - if ($criterion->value === null) { - $criterion->value[] = null; - } else { - $criterion->value = (array)$criterion->value; - } + $criterion->value = (array)$criterion->value; $queries = array(); foreach ($searchFields as $name => $fieldType) { foreach ($criterion->value as $value) { - if ($value === null) { - $name = $this->fieldNameGenerator->getTypedName( - $this->fieldNameGenerator->getName( - ContentDocumentNullFields::IS_NULL_NAME, - $criterion->target - ), - new BooleanField() - ); - $queries[] = $name . ':true'; - } else { - $preparedValue = $this->escapeQuote( - $this->toString( - $this->mapSearchFieldValue($value, $fieldType) - ), - true - ); - $queries[] = $name . ':"' . $preparedValue . '"'; - } + $preparedValue = $this->escapeQuote( + $this->toString( + $this->mapSearchFieldValue($value, $fieldType) + ), + true + ); + + $queries[] = $name . ':"' . $preparedValue . '"'; } } diff --git a/lib/Resources/config/container/solr/criterion_visitors.yml b/lib/Resources/config/container/solr/criterion_visitors.yml index 6e01d76c6..f46b3a992 100644 --- a/lib/Resources/config/container/solr/criterion_visitors.yml +++ b/lib/Resources/config/container/solr/criterion_visitors.yml @@ -105,7 +105,6 @@ services: arguments: - "@ezpublish.search.common.field_name_resolver" - "@ezpublish.search.common.field_value_mapper.aggregate" - - "@ezpublish.search.common.field_name_generator" tags: - {name: ezpublish.search.solr.query.content.criterion_visitor} - {name: ezpublish.search.solr.query.location.criterion_visitor} diff --git a/lib/Resources/config/container/solr/field_mappers.yml b/lib/Resources/config/container/solr/field_mappers.yml index 5c74069e9..e5351a24a 100644 --- a/lib/Resources/config/container/solr/field_mappers.yml +++ b/lib/Resources/config/container/solr/field_mappers.yml @@ -73,15 +73,6 @@ services: tags: - {name: ezpublish.search.solr.field_mapper.location} - ezpublish.search.solr.field_mapper.content_translation.content_document_null_fields: - class: EzSystems\EzPlatformSolrSearchEngine\FieldMapper\ContentTranslationFieldMapper\ContentDocumentNullFields - arguments: - - '@ezpublish.spi.persistence.content_type_handler' - - '@ezpublish.search.common.field_name_generator' - - '@ezpublish.persistence.field_type_registry' - tags: - - {name: ezpublish.search.solr.field_mapper.content_translation} - ezpublish.search.solr.field_mapper.content_translation.content_document_empty_fields: class: EzSystems\EzPlatformSolrSearchEngine\FieldMapper\ContentTranslationFieldMapper\ContentDocumentEmptyFields arguments: From 5f5b6a403424a56a1ea756625bbfc1e81fd24227 Mon Sep 17 00:00:00 2001 From: Mateusz Bieniek Date: Thu, 17 Oct 2019 09:27:55 +0200 Subject: [PATCH 05/11] Fixups after CR --- .../ContentDocumentEmptyFields.php | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/lib/FieldMapper/ContentTranslationFieldMapper/ContentDocumentEmptyFields.php b/lib/FieldMapper/ContentTranslationFieldMapper/ContentDocumentEmptyFields.php index 15c2e6f81..179be1dce 100644 --- a/lib/FieldMapper/ContentTranslationFieldMapper/ContentDocumentEmptyFields.php +++ b/lib/FieldMapper/ContentTranslationFieldMapper/ContentDocumentEmptyFields.php @@ -50,11 +50,21 @@ public function __construct( $this->fieldTypeRegistry = $fieldTypeRegistry; } + /** + * @param Content $content + * @param $languageCode + * @return bool + */ public function accept(Content $content, $languageCode) { return true; } + /** + * @param Content $content + * @param string $languageCode + * @return array|Field[] + */ public function mapFields(Content $content, $languageCode) { $fields = []; From d8e6ac6258b8352e306e003f84fb9908605f1590 Mon Sep 17 00:00:00 2001 From: Mateusz Bieniek Date: Fri, 18 Oct 2019 11:18:08 +0200 Subject: [PATCH 06/11] CS Fixups --- .../ContentDocumentEmptyFields.php | 10 ++++++---- lib/Query/Common/CriterionVisitor/Field/FieldEmpty.php | 2 +- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/lib/FieldMapper/ContentTranslationFieldMapper/ContentDocumentEmptyFields.php b/lib/FieldMapper/ContentTranslationFieldMapper/ContentDocumentEmptyFields.php index 179be1dce..a6b41e2e6 100644 --- a/lib/FieldMapper/ContentTranslationFieldMapper/ContentDocumentEmptyFields.php +++ b/lib/FieldMapper/ContentTranslationFieldMapper/ContentDocumentEmptyFields.php @@ -18,7 +18,7 @@ */ class ContentDocumentEmptyFields extends ContentTranslationFieldMapper { - const IS_EMPTY_NAME = 'is_empty'; + public const IS_EMPTY_NAME = 'is_empty'; /** * @var \eZ\Publish\SPI\Persistence\Content\Type\Handler @@ -51,8 +51,9 @@ public function __construct( } /** - * @param Content $content + * @param \eZ\Publish\SPI\Persistence\Content $content * @param $languageCode + * * @return bool */ public function accept(Content $content, $languageCode) @@ -61,9 +62,10 @@ public function accept(Content $content, $languageCode) } /** - * @param Content $content + * @param \eZ\Publish\SPI\Persistence\Content $content * @param string $languageCode - * @return array|Field[] + * + * @return array|\eZ\Publish\SPI\Search\Field[] */ public function mapFields(Content $content, $languageCode) { diff --git a/lib/Query/Common/CriterionVisitor/Field/FieldEmpty.php b/lib/Query/Common/CriterionVisitor/Field/FieldEmpty.php index 0975ba6bd..c7293b6be 100644 --- a/lib/Query/Common/CriterionVisitor/Field/FieldEmpty.php +++ b/lib/Query/Common/CriterionVisitor/Field/FieldEmpty.php @@ -44,7 +44,7 @@ public function __construct(FieldNameResolver $fieldNameResolver, FieldValueMapp /** * Check if visitor is applicable to current criterion. * - * @param Criterion $criterion + * @param \eZ\Publish\API\Repository\Values\Content\Query\Criterion $criterion * * @return bool */ From 50ba1149cd56150c42344e9c611c2d6c13e5f88a Mon Sep 17 00:00:00 2001 From: Mateusz Bieniek Date: Mon, 21 Oct 2019 11:09:46 +0200 Subject: [PATCH 07/11] Fixups after CR --- .../ContentDocumentEmptyFields.php | 7 +++++-- .../Common/CriterionVisitor/Field/FieldEmpty.php | 16 +++++++++------- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/lib/FieldMapper/ContentTranslationFieldMapper/ContentDocumentEmptyFields.php b/lib/FieldMapper/ContentTranslationFieldMapper/ContentDocumentEmptyFields.php index a6b41e2e6..ee5525184 100644 --- a/lib/FieldMapper/ContentTranslationFieldMapper/ContentDocumentEmptyFields.php +++ b/lib/FieldMapper/ContentTranslationFieldMapper/ContentDocumentEmptyFields.php @@ -1,8 +1,11 @@ fieldDefinitions as $fieldDefinition) { - if ($fieldDefinition->id !== $field->fieldDefinitionId) { + if ($fieldDefinition->isRequired) { continue; } - if ($fieldDefinition->isRequired) { + if ($fieldDefinition->id !== $field->fieldDefinitionId) { continue; } diff --git a/lib/Query/Common/CriterionVisitor/Field/FieldEmpty.php b/lib/Query/Common/CriterionVisitor/Field/FieldEmpty.php index c7293b6be..112469e7e 100644 --- a/lib/Query/Common/CriterionVisitor/Field/FieldEmpty.php +++ b/lib/Query/Common/CriterionVisitor/Field/FieldEmpty.php @@ -1,11 +1,11 @@ fieldNameGenerator = $fieldNameGenerator; @@ -50,13 +52,13 @@ public function __construct(FieldNameResolver $fieldNameResolver, FieldValueMapp */ public function canVisit(Criterion $criterion) { - return $criterion instanceof Criterion\IsFieldEmpty && Operator::EQ; + return $criterion instanceof Criterion\IsFieldEmpty; } /** * Map field value to a proper Solr representation. * - * @throws \eZ\Publish\Core\Base\Exceptions\InvalidArgumentException If no searchable fields are found for the given criterion target. + * @throws \eZ\Publish\API\Repository\Exceptions\InvalidArgumentException If no searchable fields are found for the given criterion target. * * @param \eZ\Publish\API\Repository\Values\Content\Query\Criterion $criterion * @param \EzSystems\EzPlatformSolrSearchEngine\Query\CriterionVisitor $subVisitor From dc07b307daec83e6bd41e387cafdefd583836976 Mon Sep 17 00:00:00 2001 From: Mateusz Bieniek Date: Mon, 21 Oct 2019 16:33:37 +0200 Subject: [PATCH 08/11] Small change for FieldEmpty Vistor --- lib/Query/Common/CriterionVisitor/Field/FieldEmpty.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/Query/Common/CriterionVisitor/Field/FieldEmpty.php b/lib/Query/Common/CriterionVisitor/Field/FieldEmpty.php index 112469e7e..d1ee88e27 100644 --- a/lib/Query/Common/CriterionVisitor/Field/FieldEmpty.php +++ b/lib/Query/Common/CriterionVisitor/Field/FieldEmpty.php @@ -88,7 +88,7 @@ public function visit(Criterion $criterion, CriterionVisitor $subVisitor = null) ), new BooleanField() ); - $queries[] = $name . ':' . $value; + $queries[] = $name . ':' . (int) $value; } } From f0c7a0318f0dad87ed75e063cbff0929e0ac4edc Mon Sep 17 00:00:00 2001 From: Mateusz Bieniek Date: Mon, 28 Oct 2019 12:50:40 +0100 Subject: [PATCH 09/11] Changes after CR --- .../ContentDocumentEmptyFields.php | 6 +++--- lib/Query/Common/CriterionVisitor/Field/FieldEmpty.php | 10 +++------- 2 files changed, 6 insertions(+), 10 deletions(-) diff --git a/lib/FieldMapper/ContentTranslationFieldMapper/ContentDocumentEmptyFields.php b/lib/FieldMapper/ContentTranslationFieldMapper/ContentDocumentEmptyFields.php index ee5525184..b5d691fe8 100644 --- a/lib/FieldMapper/ContentTranslationFieldMapper/ContentDocumentEmptyFields.php +++ b/lib/FieldMapper/ContentTranslationFieldMapper/ContentDocumentEmptyFields.php @@ -68,7 +68,7 @@ public function accept(Content $content, $languageCode) * @param \eZ\Publish\SPI\Persistence\Content $content * @param string $languageCode * - * @return array|\eZ\Publish\SPI\Search\Field[] + * @return \eZ\Publish\SPI\Search\Field[] */ public function mapFields(Content $content, $languageCode) { @@ -90,14 +90,14 @@ public function mapFields(Content $content, $languageCode) continue; } - /** @var \eZ\Publish\Core\Persistence\FieldType $fieldType */ + /** @var \eZ\Publish\Core\Persistence\IsEmptyFieldType $fieldType */ $fieldType = $this->fieldTypeRegistry->getFieldType($fieldDefinition->fieldType); $fields[] = new Field( $name = $this->fieldNameGenerator->getName( self::IS_EMPTY_NAME, $fieldDefinition->identifier ), - ($fieldType->getEmptyValue() == $field->value), + $fieldType->isEmptyValue($field->value), new FieldType\BooleanField() ); } diff --git a/lib/Query/Common/CriterionVisitor/Field/FieldEmpty.php b/lib/Query/Common/CriterionVisitor/Field/FieldEmpty.php index d1ee88e27..f6589af32 100644 --- a/lib/Query/Common/CriterionVisitor/Field/FieldEmpty.php +++ b/lib/Query/Common/CriterionVisitor/Field/FieldEmpty.php @@ -21,7 +21,7 @@ /** * Visits the IsFieldEmpty criterion. */ -class FieldEmpty extends Field +final class FieldEmpty extends Field { /** * @var \eZ\Publish\Core\Search\Common\FieldNameGenerator @@ -45,12 +45,8 @@ public function __construct( /** * Check if visitor is applicable to current criterion. - * - * @param \eZ\Publish\API\Repository\Values\Content\Query\Criterion $criterion - * - * @return bool */ - public function canVisit(Criterion $criterion) + public function canVisit(Criterion $criterion): bool { return $criterion instanceof Criterion\IsFieldEmpty; } @@ -65,7 +61,7 @@ public function canVisit(Criterion $criterion) * * @return string */ - public function visit(Criterion $criterion, CriterionVisitor $subVisitor = null) + public function visit(Criterion $criterion, CriterionVisitor $subVisitor = null): string { $searchFields = $this->getSearchFields($criterion); From cfe47ca2c466f8781d9aaeae2e07a8c9628da721 Mon Sep 17 00:00:00 2001 From: Mateusz Bieniek Date: Wed, 30 Oct 2019 14:24:10 +0100 Subject: [PATCH 10/11] Fixups after CR --- .../ContentDocumentEmptyFields.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/FieldMapper/ContentTranslationFieldMapper/ContentDocumentEmptyFields.php b/lib/FieldMapper/ContentTranslationFieldMapper/ContentDocumentEmptyFields.php index b5d691fe8..2e2abd24a 100644 --- a/lib/FieldMapper/ContentTranslationFieldMapper/ContentDocumentEmptyFields.php +++ b/lib/FieldMapper/ContentTranslationFieldMapper/ContentDocumentEmptyFields.php @@ -55,7 +55,7 @@ public function __construct( /** * @param \eZ\Publish\SPI\Persistence\Content $content - * @param $languageCode + * @param string $languageCode * * @return bool */ @@ -90,7 +90,7 @@ public function mapFields(Content $content, $languageCode) continue; } - /** @var \eZ\Publish\Core\Persistence\IsEmptyFieldType $fieldType */ + /** @var \eZ\Publish\Core\Persistence\FieldType $fieldType */ $fieldType = $this->fieldTypeRegistry->getFieldType($fieldDefinition->fieldType); $fields[] = new Field( $name = $this->fieldNameGenerator->getName( From 436fedc20fa4156855275b068fb6eda530924333 Mon Sep 17 00:00:00 2001 From: Mateusz Bieniek Date: Wed, 30 Oct 2019 15:00:26 +0100 Subject: [PATCH 11/11] Updated composer.json kernel requirement --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index 52d419748..494ecfa6c 100644 --- a/composer.json +++ b/composer.json @@ -12,7 +12,7 @@ ], "require": { "php": "^7.1", - "ezsystems/ezpublish-kernel": "^7.5@dev", + "ezsystems/ezpublish-kernel": "^7.5.7@dev", "netgen/query-translator": "^1.0.2" }, "require-dev": {