diff --git a/modules/schemadotorg_entity_reference_override/config/schema/schemadotorg_entity_reference_override.settings.schema.yml b/modules/schemadotorg_entity_reference_override/config/schema/schemadotorg_entity_reference_override.settings.schema.yml index 13fcbf526bed1383ce51ae41dd566e630f94deed..7a4f74df5d8a79e9c229f257f9cd0a2a3b957891 100644 --- a/modules/schemadotorg_entity_reference_override/config/schema/schemadotorg_entity_reference_override.settings.schema.yml +++ b/modules/schemadotorg_entity_reference_override/config/schema/schemadotorg_entity_reference_override.settings.schema.yml @@ -9,6 +9,15 @@ schemadotorg_entity_reference_override.settings: type: mapping label: 'Entity reference override Schema.org property' mapping: + override_format: + type: string + label: 'Custom text format' + override_label: + type: label + label: 'Custom text label' + override_action: + type: string + label: 'Use custom text to' type: type: string label: Type diff --git a/modules/schemadotorg_entity_reference_override/src/SchemaDotOrgEntityReferenceOverrideManager.php b/modules/schemadotorg_entity_reference_override/src/SchemaDotOrgEntityReferenceOverrideManager.php index 413076d599be0b4b73d2858c4eb9f5ced246142d..704cdb58080645e85c54a4a2a6d34b162de8ef0d 100644 --- a/modules/schemadotorg_entity_reference_override/src/SchemaDotOrgEntityReferenceOverrideManager.php +++ b/modules/schemadotorg_entity_reference_override/src/SchemaDotOrgEntityReferenceOverrideManager.php @@ -53,18 +53,19 @@ class SchemaDotOrgEntityReferenceOverrideManager implements SchemaDotOrgEntityRe } // Check that the Schema.org property should use an entity reference override. - $settings = $this->getSetting( + $setting = $this->getSetting( $field_values['entity_type'], $field_values['bundle'], $schema_type, $schema_property, ); - if (!$settings) { + if (!$setting) { return; } - // Set the entity reference override label. - $field_values['settings']['override_label'] = (string) $this->t('Enter role'); + // Set the entity reference override format and label. + $field_values['settings']['override_format'] = $setting['override_format'] ?? NULL; + $field_values['settings']['override_label'] = $setting['override_label'] ?? (string) $this->t('Custom text'); // Change the field storage type. $field_storage_values['type'] = 'entity_reference_override'; @@ -77,7 +78,7 @@ class SchemaDotOrgEntityReferenceOverrideManager implements SchemaDotOrgEntityRe $formatter_id = 'entity_reference_override_label'; $formatter_settings = [ 'link' => TRUE, - 'override_action' => 'suffix', + 'override_action' => $setting['override_action'] ?? 'suffix', ]; } @@ -101,18 +102,18 @@ class SchemaDotOrgEntityReferenceOverrideManager implements SchemaDotOrgEntityRe return; } - $alter_elements = $this->getSetting( + $setting = $this->getSetting( $mapping->getTargetEntityTypeId(), $mapping->getTargetBundle(), $mapping->getSchemaType(), $schema_property, ); - if (!$alter_elements) { + if (!$setting) { return; } - foreach ($alter_elements as $alter_element) { - foreach ($alter_element as $key => $value) { + foreach ($setting as $key => $value) { + if (!str_starts_with($key, 'override_')) { $element['override']['#' . $key] = $value; } } @@ -151,13 +152,13 @@ class SchemaDotOrgEntityReferenceOverrideManager implements SchemaDotOrgEntityRe } // Check that the Schema.org property should use an entity reference override. - $settings = $this->getSetting( + $setting = $this->getSetting( $mapping->getTargetEntityTypeId(), $mapping->getTargetBundle(), $mapping->getSchemaType(), $schema_property, ); - if (!$settings) { + if (!$setting) { return; } @@ -206,7 +207,7 @@ class SchemaDotOrgEntityReferenceOverrideManager implements SchemaDotOrgEntityRe 'schema_type' => $schema_type, 'schema_property' => $schema_property, ]; - return $this->schemaTypeManager->getSetting($overrides_alter, $parts, TRUE); + return $this->schemaTypeManager->getSetting($overrides_alter, $parts); } } diff --git a/modules/schemadotorg_entity_reference_override/tests/src/Kernel/SchemaDotOrgEntityReferenceOverrideKernelTest.php b/modules/schemadotorg_entity_reference_override/tests/src/Kernel/SchemaDotOrgEntityReferenceOverrideKernelTest.php index 888fb06548294f85fe7d1c0301da11b354bb6c46..054ad790f5c564002ce3fb0087f977ab9b6dd431 100644 --- a/modules/schemadotorg_entity_reference_override/tests/src/Kernel/SchemaDotOrgEntityReferenceOverrideKernelTest.php +++ b/modules/schemadotorg_entity_reference_override/tests/src/Kernel/SchemaDotOrgEntityReferenceOverrideKernelTest.php @@ -5,7 +5,6 @@ declare(strict_types=1); namespace Drupal\Tests\schemadotorg_entity_reference_override\Kernel; use Drupal\field\Entity\FieldConfig; -use Drupal\node\Entity\Node; use Drupal\Tests\schemadotorg\Kernel\SchemaDotOrgEntityKernelTestBase; /** @@ -46,34 +45,29 @@ class SchemaDotOrgEntityReferenceOverrideKernelTest extends SchemaDotOrgEntityKe public function testEntityReferenceOverride(): void { \Drupal::currentUser()->setAccount($this->createUser(['access content'])); + $this->config('schemadotorg_entity_reference_override.settings') + ->set('schema_properties.LocalBusiness--member', [ + 'override_format' => 'custom_format', + 'override_label' => 'Custom label', + ]) + ->save(); + $this->appendSchemaTypeDefaultProperties('Organization', 'member'); $this->createSchemaEntity('node', 'Person'); $this->createSchemaEntity('node', 'Organization'); - - $person_node = Node::create([ - 'type' => 'person', - 'title' => 'John Smith', - ]); - $person_node->save(); - - $organization_node = Node::create([ - 'type' => 'organization', - 'title' => 'Organization', - 'schema_member' => [ - [ - 'target_id' => $person_node->id(), - 'override' => 'President', - ], - ], - ]); - $organization_node->save(); + $this->createSchemaEntity('node', 'LocalBusiness'); /* ********************************************************************** */ $field_config = FieldConfig::load('node.organization.schema_member'); - $this->assertEquals('Enter role', $field_config->getSetting('override_label')); + $this->assertEquals('Custom text', $field_config->getSetting('override_label')); $this->assertEquals(NULL, $field_config->getSetting('override_format')); $this->assertEquals('entity_reference_override', $field_config->getType()); + + $field_config = FieldConfig::load('node.local_business.schema_member'); + $this->assertEquals('Custom label', $field_config->getSetting('override_label')); + $this->assertEquals('custom_format', $field_config->getSetting('override_format')); + $this->assertEquals('entity_reference_override', $field_config->getType()); } }