diff --git a/src/DefinitionsCollection/Factory/FieldDefinitionFactory.php b/src/DefinitionsCollection/Factory/FieldDefinitionFactory.php index d8c7c7a..391829f 100644 --- a/src/DefinitionsCollection/Factory/FieldDefinitionFactory.php +++ b/src/DefinitionsCollection/Factory/FieldDefinitionFactory.php @@ -12,10 +12,24 @@ class FieldDefinitionFactory public function get(DataQualityFieldDefinition $definition): FieldDefinition { - list($fieldName, $title) = explode('@@@', $definition->getField()); + $definitionField = $definition->getField(); - if (strpos($title, '###')) { - list($title, $language) = explode('###', $title); + $fieldName = null; + $title = ''; + $language = null; + + if (preg_match('/^(.*)@@@(.*)###(.*)$/', $definitionField, $matches)) { + $fieldName = $matches[1]; + $title = $matches[2]; + $language = $matches[3]; + } elseif (preg_match('/^(.*)###(.*)$/', $definitionField, $matches)) { + $fieldName = $matches[1]; + $language = $matches[2]; + } elseif (preg_match('/^(.*)@@@(.*)$/', $definitionField, $matches)) { + $fieldName = $matches[1]; + $title= $matches[2]; + } else { + $fieldName = $definitionField; } return new FieldDefinition( diff --git a/src/Provider/DataQualityProvider.php b/src/Provider/DataQualityProvider.php index fed1b01..a354744 100644 --- a/src/Provider/DataQualityProvider.php +++ b/src/Provider/DataQualityProvider.php @@ -80,7 +80,7 @@ public function getDataQualityConfigs(?AbstractObject $dataObject): array } /** - * @throws DataQualityException|DefinitionException + * @throws DefinitionException */ public function calculateDataQuality(AbstractObject $dataObject, DataQualityConfig $dataQualityConfig): DataQualityViewModel { @@ -98,11 +98,10 @@ public function calculateDataQuality(AbstractObject $dataObject, DataQualityConf continue; } - $isLocalizedField = false; + $isLocalizedField = $this->isLocalizedField($dataObject, $fieldDefinition->getFieldName()); $classFieldDefinition = $this->getClassFieldDefinition( $dataObject, $fieldDefinition->getFieldName(), - $isLocalizedField ); $validFields = []; @@ -168,23 +167,32 @@ private function getDataQualityRules(DataQualityConfig $dataQualityConfig): arra return $rules; } - /** - * @throws DataQualityException - */ - private function getClassFieldDefinition(AbstractObject $dataObject, string $fieldName, bool &$isLocalizedField): Data + private function getClassFieldDefinition(AbstractObject $dataObject, string $fieldName): Data { - $classFieldDefinition = $dataObject->getClass()->getFieldDefinition($fieldName); - if (empty($classFieldDefinition)) { - $localizedFields = $dataObject->getClass()->getFieldDefinition('localizedfields'); - if ($localizedFields) { - $classFieldDefinition = $localizedFields->getFieldDefinition($fieldName); - $isLocalizedField = true; - } else { - throw new DataQualityException('fieldtype for field ' . $fieldName . ' is not supported.'); + $classDefinition = $dataObject->getClass(); + $classFieldDefinition = $classDefinition->getFieldDefinition($fieldName); + + return $classFieldDefinition; + } + + private function isLocalizedField(AbstractObject $dataObject, string $fieldName): bool + { + $classDefinition = $dataObject->getClass(); + $fieldDefinition = $classDefinition->getFieldDefinition($fieldName); + $isLocalizedField = false; + + // Loop through fields to find localizedfields container + foreach ($classDefinition->getFieldDefinitions() as $field) { + if ($field instanceof \Pimcore\Model\DataObject\ClassDefinition\Data\Localizedfields) { + $localizedFields = $field->getFieldDefinitions(); + if (array_key_exists($fieldName, $localizedFields)) { + $isLocalizedField = true; + break; + } } } - return $classFieldDefinition; + return $isLocalizedField; } private function isObjectBricks(Data $fieldDefinition): bool