diff --git a/modules/schemadotorg_taxonomy/schemadotorg_taxonomy.module b/modules/schemadotorg_taxonomy/schemadotorg_taxonomy.module index e23d0fd1194637fd2b3e2e33432c414899e7b460..b9720728942e058ff7c89a2481509ac32567beef 100644 --- a/modules/schemadotorg_taxonomy/schemadotorg_taxonomy.module +++ b/modules/schemadotorg_taxonomy/schemadotorg_taxonomy.module @@ -121,7 +121,7 @@ function schemadotorg_taxonomy_form_schemadotorg_types_settings_form_alter(array '#type' => 'schemadotorg_settings', '#title' => t('Default vocabularies'), '#description' => t('Enter default vocabularies that will be added to every Schema.org content type.'), - '#example' => ' + '#example' => " unique_name: id: vocabulary_id label: Vocabulary name @@ -136,8 +136,14 @@ unique_name: formatter_id: formatter_id formatter_settings: { } schema_types: - - Article -', + - SchemaType + - entity_type_id--bundle + - bundle + - '-SchemaType' + - '-entity_type_id--bundle' + - '-bundle' + +", ]; $form['schemadotorg_taxonomy']['apply'] = []; diff --git a/modules/schemadotorg_taxonomy/src/SchemaDotOrgTaxonomyDefaultVocabularyManager.php b/modules/schemadotorg_taxonomy/src/SchemaDotOrgTaxonomyDefaultVocabularyManager.php index 09150970bdf710aa4ef5b00da18d123d658fec36..653d0b71ee259ba24dbb7d3c61b88262cd5b2f6d 100644 --- a/modules/schemadotorg_taxonomy/src/SchemaDotOrgTaxonomyDefaultVocabularyManager.php +++ b/modules/schemadotorg_taxonomy/src/SchemaDotOrgTaxonomyDefaultVocabularyManager.php @@ -74,7 +74,7 @@ class SchemaDotOrgTaxonomyDefaultVocabularyManager implements SchemaDotOrgTaxono $schema_types = $vocabulary_settings['schema_types'] ?? NULL; // Check if the default vocabulary is for a specific Schema.org type. if ($schema_types - && !$this->schemaTypeManager->getSetting($schema_types, $mapping)) { + && !$this->schemaTypeManager->getSetting($schema_types, $mapping, ['negate' => TRUE])) { continue; } diff --git a/src/SchemaDotOrgSchemaTypeManager.php b/src/SchemaDotOrgSchemaTypeManager.php index 4c058f10bf20ed2d58a854af66377851aa19da45..60f8cade1701198302a2623f38fc9ff58cc6dedf 100644 --- a/src/SchemaDotOrgSchemaTypeManager.php +++ b/src/SchemaDotOrgSchemaTypeManager.php @@ -730,6 +730,7 @@ class SchemaDotOrgSchemaTypeManager implements SchemaDotOrgSchemaTypeManagerInte $options += [ 'multiple' => FALSE, 'parents' => TRUE, + 'negate' => FALSE, ]; // Get the parts from a Schema.org mapping. @@ -753,6 +754,20 @@ class SchemaDotOrgSchemaTypeManager implements SchemaDotOrgSchemaTypeManagerInte $settings = array_fill_keys(array_keys($settings), TRUE); } + // If negate settings are passed we need to find them and return NULL. + if (!empty($options['negate'])) { + $negate_settings = []; + foreach ($settings as $key => $value) { + if (str_starts_with($key, '-')) { + // Change the value to TRUE because we are ignoring that settings. + $negate_settings[ltrim($key, '-')] = TRUE; + } + } + if ($this->getSetting($negate_settings, $parts, ['negate' => FALSE] + $options, $patterns)) { + return NULL; + } + } + // Filter the patterns to only applicable patterns by part name. $part_names = array_flip($parts); foreach ($patterns as $index => $pattern) { diff --git a/src/SchemaDotOrgSchemaTypeManagerInterface.php b/src/SchemaDotOrgSchemaTypeManagerInterface.php index d63127fd4202355b25c4fc498dc92bcb0bfd1608..9acedb4171ec42dc8c922e40c21adbc0711f87b7 100644 --- a/src/SchemaDotOrgSchemaTypeManagerInterface.php +++ b/src/SchemaDotOrgSchemaTypeManagerInterface.php @@ -496,6 +496,9 @@ interface SchemaDotOrgSchemaTypeManagerInterface { * Return multiple matches. Defaults to FALSE and returns the first match. * - parents (bool) * Checks parent Schema.org types. Defaults to TRUE. + * - negate (bool) + * Checks for settings that should not being applied. + * (i.e., starts with a minus (-)) * @param array|null $patterns * Optional. The patterns to match against the settings array. * Defaults to NULL. diff --git a/tests/src/Kernel/SchemaDotOrgSchemaTypeManagerKernelTest.php b/tests/src/Kernel/SchemaDotOrgSchemaTypeManagerKernelTest.php index 474dc5c0aa2cf52fc5fe036867789598209898c8..bcaee14d4c6ed0a63572bb7413656fe4bdc08d8d 100644 --- a/tests/src/Kernel/SchemaDotOrgSchemaTypeManagerKernelTest.php +++ b/tests/src/Kernel/SchemaDotOrgSchemaTypeManagerKernelTest.php @@ -440,6 +440,7 @@ class SchemaDotOrgSchemaTypeManagerKernelTest extends SchemaDotOrgKernelTestBase 'Place' => 'This is a place.', 'Thing' => 'This is thing', 'name' => 'A name', + '-Recipe' => 'Negated recipe (not returned)', ]; $parts = [ @@ -462,6 +463,9 @@ class SchemaDotOrgSchemaTypeManagerKernelTest extends SchemaDotOrgKernelTestBase $this->assertNull( $this->schemaTypeManager->getSetting($settings, $parts, ['parents' => FALSE]) ); + $this->assertNull( + $this->schemaTypeManager->getSetting($settings, $parts, ['negate' => TRUE]) + ); $parts = [ 'schema_type' => 'Recipe',