From f0b59afd2dba95018f1cc203a23239333171e0bc Mon Sep 17 00:00:00 2001 From: Jacob Rockowitz <21160-jrockowitz@users.noreply.drupalcode.org> Date: Sun, 24 Mar 2024 11:51:51 +0000 Subject: [PATCH] Issue #3406816: Functionality for creating global JSON-LD definitions, e.g. for an organization --- .../schemadotorg_address.module | 21 +++++++++--------- ...DotOrgContentModelDocumentationManager.php | 9 +------- .../schemadotorg_jsonld_custom.module | 10 +++++++++ .../src/SchemaDotOrgJsonLdCustomManager.php | 22 +++++++------------ src/SchemaDotOrgSchemaTypeManager.php | 11 +++++++++- ...SchemaDotOrgSchemaTypeManagerInterface.php | 10 +++++---- 6 files changed, 45 insertions(+), 38 deletions(-) diff --git a/modules/schemadotorg_address/schemadotorg_address.module b/modules/schemadotorg_address/schemadotorg_address.module index 7c328591d..6a1b8d79d 100644 --- a/modules/schemadotorg_address/schemadotorg_address.module +++ b/modules/schemadotorg_address/schemadotorg_address.module @@ -29,21 +29,20 @@ function schemadotorg_address_schemadotorg_property_field_alter( return; } - $config = \Drupal::config('schemadotorg_address.settings'); /** @var \Drupal\schemadotorg\SchemaDotOrgSchemaTypeManagerInterface $schema_type_manager */ $schema_type_manager = \Drupal::service('schemadotorg.schema_type_manager'); - $field_overrides = []; - - $breadcrumbs = $schema_type_manager->getTypeBreadcrumbs($schema_type); - foreach ($breadcrumbs as $breadcrumb) { - $breadcrumb_types = array_reverse($breadcrumb); - foreach ($breadcrumb_types as $breadcrumb_type) { - $field_overrides += $config->get("field_overrides.$breadcrumb_type--$schema_property") ?? []; - } - } + $config = \Drupal::config('schemadotorg_address.settings'); - $field_overrides += $config->get("field_overrides.$schema_property") ?? []; + $field_overrides = []; + $field_overrides += $schema_type_manager->getSetting( + $config->get('field_overrides'), + ['schema_type' => $schema_type, 'schema_property' => $schema_property] + ) ?? []; + $field_overrides += $schema_type_manager->getSetting( + $config->get('field_overrides'), + ['schema_property' => $schema_property] + ) ?? []; $field_values['settings']['field_overrides'] = []; foreach ($field_overrides as $property => $override) { diff --git a/modules/schemadotorg_content_model_documentation/src/SchemaDotOrgContentModelDocumentationManager.php b/modules/schemadotorg_content_model_documentation/src/SchemaDotOrgContentModelDocumentationManager.php index 2b9c5d211..1e79978c4 100644 --- a/modules/schemadotorg_content_model_documentation/src/SchemaDotOrgContentModelDocumentationManager.php +++ b/modules/schemadotorg_content_model_documentation/src/SchemaDotOrgContentModelDocumentationManager.php @@ -157,16 +157,9 @@ class SchemaDotOrgContentModelDocumentationManager implements SchemaDotOrgConten $config = $this->configFactory ->get('schemadotorg_content_model_documentation.settings'); - $entity_type_id = $mapping->getTargetEntityTypeId(); - $bundle = $mapping->getTargetBundle(); - $schema_type = $mapping->getSchemaType(); $types = $config->get('types'); $types = array_combine($types, $types); - return (bool) $this->schemaTypeManager->getSetting($types, [ - 'entity_type_id' => $entity_type_id, - 'bundle' => $bundle, - 'schema_type' => $schema_type, - ]); + return (bool) $this->schemaTypeManager->getSetting($types, $mapping); } /** diff --git a/modules/schemadotorg_jsonld_custom/schemadotorg_jsonld_custom.module b/modules/schemadotorg_jsonld_custom/schemadotorg_jsonld_custom.module index b039251b6..3d8add195 100644 --- a/modules/schemadotorg_jsonld_custom/schemadotorg_jsonld_custom.module +++ b/modules/schemadotorg_jsonld_custom/schemadotorg_jsonld_custom.module @@ -130,6 +130,11 @@ function schemadotorg_jsonld_custom_form_schemadotorg_jsonld_settings_form_alter '#description' => t('Enter the default JSON-LD for Schema.org types.'), '#element_validate' => ['_schemadotorg_jsonld_custom_json_settings_validate'], '#example' => ' +node--page: | + { + "copyrightHolder": "[site:name]", + "copyrightYear": [current-date:html_year] + } node--CreativeWork: | { "copyrightHolder": "[site:name]", @@ -144,6 +149,11 @@ node--CreativeWork: | '#description' => t('Enter the default JSON-LD for new Schema.org mappings.'), '#element_validate' => ['_schemadotorg_jsonld_custom_json_settings_validate'], '#example' => ' +node--page: | + { + "copyrightHolder": "[site:name]", + "copyrightYear": [current-date:html_year] + } node--CreativeWork: | { "copyrightHolder": "[site:name]", diff --git a/modules/schemadotorg_jsonld_custom/src/SchemaDotOrgJsonLdCustomManager.php b/modules/schemadotorg_jsonld_custom/src/SchemaDotOrgJsonLdCustomManager.php index 4a2955d42..a766cd216 100644 --- a/modules/schemadotorg_jsonld_custom/src/SchemaDotOrgJsonLdCustomManager.php +++ b/modules/schemadotorg_jsonld_custom/src/SchemaDotOrgJsonLdCustomManager.php @@ -171,20 +171,14 @@ class SchemaDotOrgJsonLdCustomManager implements SchemaDotOrgJsonLdCustomInterfa * The default custom JSON-LD for Schema.org type. */ protected function getDefaultJson(string $entity_type_id, string $schema_type, string $config_name): ?string { - $config = $this->configFactory->get('schemadotorg_jsonld_custom.settings'); - - $breadcrumbs = $this->schemaTypeManager->getTypeBreadcrumbs($schema_type); - foreach ($breadcrumbs as $breadcrumb) { - $breadcrumb_types = array_reverse($breadcrumb); - foreach ($breadcrumb_types as $breadcrumb_type) { - $default_json = $config->get("$config_name.$entity_type_id--$breadcrumb_type") - ?? $config->get("$config_name.$breadcrumb_type"); - if ($default_json) { - return $default_json; - } - } - } - return NULL; + $settings = $this->configFactory + ->get('schemadotorg_jsonld_custom.settings') + ->get($config_name); + $parts = [ + 'entity_type_id' => $entity_type_id, + 'schema_type' => $schema_type, + ]; + return $this->schemaTypeManager->getSetting($settings, $parts); } } diff --git a/src/SchemaDotOrgSchemaTypeManager.php b/src/SchemaDotOrgSchemaTypeManager.php index cdc1b3cf9..33dcf2378 100644 --- a/src/SchemaDotOrgSchemaTypeManager.php +++ b/src/SchemaDotOrgSchemaTypeManager.php @@ -713,7 +713,16 @@ class SchemaDotOrgSchemaTypeManager implements SchemaDotOrgSchemaTypeManagerInte /** * {@inheritdoc} */ - public function getSetting(array $settings, array $parts): mixed { + public function getSetting(array $settings, SchemaDotOrgMappingInterface|array $parts): mixed { + // Get the parts from a Schema.org mapping. + if ($parts instanceof SchemaDotOrgMappingInterface) { + $parts = [ + 'entity_type_id' => $parts->getTargetEntityTypeId(), + 'bundle' => $parts->getTargetBundle(), + 'schema_type' => $parts->getSchemaType(), + ]; + } + // @todo Determine if patterns should be customizable. $patterns = [ ['entity_type_id', 'bundle', 'field_name'], diff --git a/src/SchemaDotOrgSchemaTypeManagerInterface.php b/src/SchemaDotOrgSchemaTypeManagerInterface.php index 80d3f4003..847a4f9ee 100644 --- a/src/SchemaDotOrgSchemaTypeManagerInterface.php +++ b/src/SchemaDotOrgSchemaTypeManagerInterface.php @@ -487,16 +487,18 @@ interface SchemaDotOrgSchemaTypeManagerInterface { * * @param array $settings * An associative array of settings. - * @param array $parts - * An associative array of setting name part which includes. + * @param \Drupal\schemadotorg\SchemaDotOrgMappingInterface|array $parts + * A Schema.org mapping or an associative array of setting name parts + * which includes. * - schema_type: The Schema.org type. - * - schema_property: The Schema.org property. * - entity_type_id: The entity type id. + * - bundle: The entity bundle. + * - schema_property: The Schema.org property. * - field_name: The field name. * * @return mixed * A setting from an associative array of settings. */ - public function getSetting(array $settings, array $parts): mixed; + public function getSetting(array $settings, SchemaDotOrgMappingInterface|array $parts): mixed; } -- GitLab