Skip to content
This repository has been archived by the owner on Jul 27, 2022. It is now read-only.

Commit

Permalink
ISAICP-3576: Move cardinality limitation on save.
Browse files Browse the repository at this point in the history
  • Loading branch information
claudiu-cristea committed Feb 18, 2021
1 parent a07135d commit a282541
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 15 deletions.
20 changes: 10 additions & 10 deletions src/SparqlEntityStorage.php
Original file line number Diff line number Diff line change
Expand Up @@ -395,27 +395,21 @@ protected function processResults(array $triples, array $graph_ids, array $graph
foreach (array_diff_key($entity, array_flip($processed_fields)) as $predicate => $languages) {
// Complex field with field predicate.
if ($field_name = $this->fieldHandler->getFieldNameByPredicate($entity_type_id, $bundle, $predicate)) {
$cardinality = $this->fieldHandler->getFieldCardinality($entity_type_id, $field_name);
foreach ($languages as $langcode => $values) {
foreach ($values as $delta => $item) {
if ($cardinality === FieldStorageConfigInterface::CARDINALITY_UNLIMITED || $delta < $cardinality) {
foreach ($item as $column_predicate => $value) {
$column_name = $this->fieldHandler->getColumnNameByPredicate($entity_type_id, $bundle, $column_predicate);
$entity[$field_name][$langcode][$delta][$column_name] = $this->fieldHandler->getInboundValue($entity_type_id, $field_name, $value, $langcode, $column_name, $bundle);
}
foreach ($item as $column_predicate => $value) {
$column_name = $this->fieldHandler->getColumnNameByPredicate($entity_type_id, $bundle, $column_predicate);
$entity[$field_name][$langcode][$delta][$column_name] = $this->fieldHandler->getInboundValue($entity_type_id, $field_name, $value, $langcode, $column_name, $bundle);
}
}
}
}
// Simple column mappings.
elseif ($column_name = $this->fieldHandler->getColumnNameByPredicate($entity_type_id, $bundle, $predicate)) {
$field_name = $this->fieldHandler->getColumnFieldNameByPredicate($entity_type_id, $bundle, $predicate);
$cardinality = $this->fieldHandler->getFieldCardinality($entity_type_id, $field_name);
foreach ($languages as $langcode => $values) {
foreach ($values as $delta => $value) {
if ($cardinality === FieldStorageConfigInterface::CARDINALITY_UNLIMITED || $delta < $cardinality) {
$entity[$field_name][$langcode][$delta][$column_name] = $this->fieldHandler->getInboundValue($entity_type_id, $field_name, $value, $langcode, $column_name, $bundle);
}
$entity[$field_name][$langcode][$delta][$column_name] = $this->fieldHandler->getInboundValue($entity_type_id, $field_name, $value, $langcode, $column_name, $bundle);
}
}
}
Expand Down Expand Up @@ -946,6 +940,7 @@ protected function doSave($id, EntityInterface $entity) {
$lang_array = $this->toLangArray($entity);
foreach ($lang_array as $field_name => $langcode_data) {
$field_predicate = $this->fieldHandler->getFieldPredicate($entity_type_id, $field_name);
$cardinality = $this->fieldHandler->getFieldCardinality($entity_type_id, $field_name);
foreach ($langcode_data as $langcode => $field_item_list) {
foreach ($field_item_list as $delta => $field_item) {
// This is a multi-value field, we store the subsequent field item
Expand Down Expand Up @@ -975,6 +970,11 @@ protected function doSave($id, EntityInterface $entity) {
$graph->add($id, $predicate, $value);
}
}

if ($cardinality && $cardinality !== FieldStorageConfigInterface::CARDINALITY_UNLIMITED && $cardinality === $delta + 1) {
// Just reached the max delta for fields with limited cardinality.
break;
}
}
}
}
Expand Down
8 changes: 4 additions & 4 deletions src/SparqlEntityStorageFieldHandler.php
Original file line number Diff line number Diff line change
Expand Up @@ -193,11 +193,11 @@ protected function buildEntityTypeProperties($entity_type_id) {
$field_storage_definition = $field_definition->getFieldStorageDefinition();

if ($field_storage_definition instanceof BaseFieldDefinition) {
$column_mappings = $bundle_info['sparql_entity_storage']['base_fields_mapping'][$field_name] ?? NULL;
$column_mappings = $bundle_info['sparql_entity_storage']['base_fields_mapping'][$field_name] ?? [];
$field_predicate = $bundle_info['sparql_entity_storage']['field_predicates'][$field_name] ?? NULL;
}
else {
$column_mappings = $field_storage_definition->getThirdPartySetting('sparql_entity_storage', 'mapping');
$column_mappings = $field_storage_definition->getThirdPartySetting('sparql_entity_storage', 'mapping', []);
$field_predicate = $field_storage_definition->getThirdPartySetting('sparql_entity_storage', 'field_predicate');
}

Expand Down Expand Up @@ -474,8 +474,8 @@ public function getFieldPredicate(string $entity_type_id, string $field_name): ?
/**
* {@inheritdoc}
*/
public function getFieldCardinality(string $entity_type_id, string $field_name): int {
return $this->getOutboundMap($entity_type_id)['fields'][$field_name]['cardinality'];
public function getFieldCardinality(string $entity_type_id, string $field_name): ?int {
return $this->getOutboundMap($entity_type_id)['fields'][$field_name]['cardinality'] ?? NULL;
}

/**
Expand Down
2 changes: 1 addition & 1 deletion src/SparqlEntityStorageFieldHandlerInterface.php
Original file line number Diff line number Diff line change
Expand Up @@ -279,7 +279,7 @@ public function getFieldPredicate(string $entity_type_id, string $field_name): ?
* @return int
* The field cardinality.
*/
public function getFieldCardinality(string $entity_type_id, string $field_name): int;
public function getFieldCardinality(string $entity_type_id, string $field_name): ?int;

/**
* Returns all field predicates for a given entity type.
Expand Down

0 comments on commit a282541

Please sign in to comment.