Skip to content
Snippets Groups Projects
Commit cdc55922 authored by jrockowitz's avatar jrockowitz
Browse files

Issue #3460070: Improve schemadotorg_entity_reference_override.module

parent 20e8e8d8
No related branches found
No related tags found
1 merge request!177Resolve #3460070 "Improve schemadotorg entity reference override"
Pipeline #219248 canceled
...@@ -9,6 +9,15 @@ schemadotorg_entity_reference_override.settings: ...@@ -9,6 +9,15 @@ schemadotorg_entity_reference_override.settings:
type: mapping type: mapping
label: 'Entity reference override Schema.org property' label: 'Entity reference override Schema.org property'
mapping: 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:
type: string type: string
label: Type label: Type
......
...@@ -53,18 +53,19 @@ class SchemaDotOrgEntityReferenceOverrideManager implements SchemaDotOrgEntityRe ...@@ -53,18 +53,19 @@ class SchemaDotOrgEntityReferenceOverrideManager implements SchemaDotOrgEntityRe
} }
// Check that the Schema.org property should use an entity reference override. // Check that the Schema.org property should use an entity reference override.
$settings = $this->getSetting( $setting = $this->getSetting(
$field_values['entity_type'], $field_values['entity_type'],
$field_values['bundle'], $field_values['bundle'],
$schema_type, $schema_type,
$schema_property, $schema_property,
); );
if (!$settings) { if (!$setting) {
return; return;
} }
// Set the entity reference override label. // Set the entity reference override format and label.
$field_values['settings']['override_label'] = (string) $this->t('Enter role'); $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. // Change the field storage type.
$field_storage_values['type'] = 'entity_reference_override'; $field_storage_values['type'] = 'entity_reference_override';
...@@ -77,7 +78,7 @@ class SchemaDotOrgEntityReferenceOverrideManager implements SchemaDotOrgEntityRe ...@@ -77,7 +78,7 @@ class SchemaDotOrgEntityReferenceOverrideManager implements SchemaDotOrgEntityRe
$formatter_id = 'entity_reference_override_label'; $formatter_id = 'entity_reference_override_label';
$formatter_settings = [ $formatter_settings = [
'link' => TRUE, 'link' => TRUE,
'override_action' => 'suffix', 'override_action' => $setting['override_action'] ?? 'suffix',
]; ];
} }
...@@ -101,18 +102,18 @@ class SchemaDotOrgEntityReferenceOverrideManager implements SchemaDotOrgEntityRe ...@@ -101,18 +102,18 @@ class SchemaDotOrgEntityReferenceOverrideManager implements SchemaDotOrgEntityRe
return; return;
} }
$alter_elements = $this->getSetting( $setting = $this->getSetting(
$mapping->getTargetEntityTypeId(), $mapping->getTargetEntityTypeId(),
$mapping->getTargetBundle(), $mapping->getTargetBundle(),
$mapping->getSchemaType(), $mapping->getSchemaType(),
$schema_property, $schema_property,
); );
if (!$alter_elements) { if (!$setting) {
return; return;
} }
foreach ($alter_elements as $alter_element) { foreach ($setting as $key => $value) {
foreach ($alter_element as $key => $value) { if (!str_starts_with($key, 'override_')) {
$element['override']['#' . $key] = $value; $element['override']['#' . $key] = $value;
} }
} }
...@@ -151,13 +152,13 @@ class SchemaDotOrgEntityReferenceOverrideManager implements SchemaDotOrgEntityRe ...@@ -151,13 +152,13 @@ class SchemaDotOrgEntityReferenceOverrideManager implements SchemaDotOrgEntityRe
} }
// Check that the Schema.org property should use an entity reference override. // Check that the Schema.org property should use an entity reference override.
$settings = $this->getSetting( $setting = $this->getSetting(
$mapping->getTargetEntityTypeId(), $mapping->getTargetEntityTypeId(),
$mapping->getTargetBundle(), $mapping->getTargetBundle(),
$mapping->getSchemaType(), $mapping->getSchemaType(),
$schema_property, $schema_property,
); );
if (!$settings) { if (!$setting) {
return; return;
} }
...@@ -206,7 +207,7 @@ class SchemaDotOrgEntityReferenceOverrideManager implements SchemaDotOrgEntityRe ...@@ -206,7 +207,7 @@ class SchemaDotOrgEntityReferenceOverrideManager implements SchemaDotOrgEntityRe
'schema_type' => $schema_type, 'schema_type' => $schema_type,
'schema_property' => $schema_property, 'schema_property' => $schema_property,
]; ];
return $this->schemaTypeManager->getSetting($overrides_alter, $parts, TRUE); return $this->schemaTypeManager->getSetting($overrides_alter, $parts);
} }
} }
...@@ -5,7 +5,6 @@ declare(strict_types=1); ...@@ -5,7 +5,6 @@ declare(strict_types=1);
namespace Drupal\Tests\schemadotorg_entity_reference_override\Kernel; namespace Drupal\Tests\schemadotorg_entity_reference_override\Kernel;
use Drupal\field\Entity\FieldConfig; use Drupal\field\Entity\FieldConfig;
use Drupal\node\Entity\Node;
use Drupal\Tests\schemadotorg\Kernel\SchemaDotOrgEntityKernelTestBase; use Drupal\Tests\schemadotorg\Kernel\SchemaDotOrgEntityKernelTestBase;
/** /**
...@@ -46,34 +45,29 @@ class SchemaDotOrgEntityReferenceOverrideKernelTest extends SchemaDotOrgEntityKe ...@@ -46,34 +45,29 @@ class SchemaDotOrgEntityReferenceOverrideKernelTest extends SchemaDotOrgEntityKe
public function testEntityReferenceOverride(): void { public function testEntityReferenceOverride(): void {
\Drupal::currentUser()->setAccount($this->createUser(['access content'])); \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->appendSchemaTypeDefaultProperties('Organization', 'member');
$this->createSchemaEntity('node', 'Person'); $this->createSchemaEntity('node', 'Person');
$this->createSchemaEntity('node', 'Organization'); $this->createSchemaEntity('node', 'Organization');
$this->createSchemaEntity('node', 'LocalBusiness');
$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();
/* ********************************************************************** */ /* ********************************************************************** */
$field_config = FieldConfig::load('node.organization.schema_member'); $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(NULL, $field_config->getSetting('override_format'));
$this->assertEquals('entity_reference_override', $field_config->getType()); $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());
} }
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment