Programming Language PHP
Namespace Oro\Component\EntitySerializer
Class EntityConfig
Total Examples 3
3 code examples of PHP Oro\Component\EntitySerializer\EntityConfig extracted from open source projects
/**
* @return string[]
*/
public function getFieldsToSerialize(string $entityClass, EntityConfig $config): array
{
// try to use cached result
$result = $config->get(self::FIELDS_SERIALIZE);
if (null !== $result) {
return $result;
}
$result = [];
$entityMetadata = $this->doctrineHelper->getEntityMetadata($entityClass);
$fields = $this->getFields($entityClass, $config);
foreach ($fields as $field) {
$propertyPath = $this->getPropertyPath($field, $config->getField($field));
if (!$entityMetadata->isCollectionValuedAssociation($propertyPath)) {
$result[] = $field;
}
}
// make sure identifier fields are added
$idField = $this->getIdField($entityClass, $config);
if (!\in_array($idField, $result, true)) {
$result[] = $idField;
if ($config->isExcludeAll()) {
$excludedFields = $config->get(ConfigUtil::EXCLUDED_FIELDS);
if (null === $excludedFields) {
$config->set(ConfigUtil::EXCLUDED_FIELDS, [$idField]);
} elseif (!\in_array($idField, $excludedFields, true)) {
$excludedFields[] = $idField;
$config->set(ConfigUtil::EXCLUDED_FIELDS, $excludedFields);
}
}
}
// add result to cache
$config->set(self::FIELDS_SERIALIZE, $result);
return $result;
}
/**
* @return string[]
*/
public function getFieldsToSelect(string $entityClass, EntityConfig $config, bool $withAssociations = false): array
{
$cacheKey = self::FIELDS_SELECT;
if ($withAssociations) {
$cacheKey = self::FIELDS_SELECT_WITH_ASSOCIATIONS;
}
// try to use cached result
$result = $config->get($cacheKey);
if (null !== $result) {
return $result;
}
$result = [];
$entityMetadata = $this->doctrineHelper->getEntityMetadata($entityClass);
$fields = $this->getFields($entityClass, $config);
foreach ($fields as $field) {
$field = $this->getPropertyPath($field, $config->getField($field));
if ($entityMetadata->isField($field)
|| ($withAssociations && $entityMetadata->isSingleValuedAssociation($field))
) {
$result[] = $field;
}
}
// make sure identifier fields are added
$idFields = $entityMetadata->getIdentifierFieldNames();
foreach ($idFields as $field) {
if (!\in_array($field, $result, true)) {
$result[] = $field;
}
}
// add result to cache
$config->set($cacheKey, $result);
return $result;
}
/**
* @return string[]
* @SuppressWarnings(PHPMD.CyclomaticComplexity)
*/
public function getFields(string $entityClass, EntityConfig $config): array
{
// try to use cached result
$result = $config->get(self::FIELDS_ALL);
if (null !== $result) {
return $result;
}
$result = [];
if ($config->isExcludeAll()) {
$fieldConfigs = $config->getFields();
foreach ($fieldConfigs as $field => $fieldConfig) {
if (!$fieldConfig->isExcluded()) {
$result[] = $field;
}
}
} else {
$entityMetadata = $this->doctrineHelper->getEntityMetadata($entityClass);
$properties = array_merge($entityMetadata->getFieldNames(), $entityMetadata->getAssociationNames());
foreach ($properties as $property) {
$field = $this->getField($config, $property);
if ($config->hasField($field)) {
$fieldConfig = $config->getField($field);
if (!$fieldConfig->isExcluded()) {
$result[] = $field;
}
} elseif ($this->isApplicableField($entityClass, $property)) {
// ignore not configured associations to avoid infinite loop
// this can be fixed when the identifier field will not be used by default for them
if (!$entityMetadata->isAssociation($field)) {
$result[] = $field;
}
}
}
$fieldConfigs = $config->getFields();
foreach ($fieldConfigs as $field => $fieldConfig) {
if ($this->isMetadataProperty($fieldConfig->getPropertyPath($field))) {
$result[] = $field;
}
}
}
// add result to cache
$config->set(self::FIELDS_ALL, $result);
return $result;
}