From 5ff2eb9f0f64a590669034a727af931a0713819f Mon Sep 17 00:00:00 2001 From: Mark Jordan Date: Wed, 27 May 2020 04:46:36 +0000 Subject: [PATCH] Work on #1521. --- islandora.links.menu.yml | 7 ++ islandora.routing.yml | 9 +++ .../RdfMappingsReportController.php | 73 +++++++++++++++++++ 3 files changed, 89 insertions(+) create mode 100644 src/Controller/RdfMappingsReportController.php diff --git a/islandora.links.menu.yml b/islandora.links.menu.yml index 36024a19..07fe2ea9 100644 --- a/islandora.links.menu.yml +++ b/islandora.links.menu.yml @@ -11,3 +11,10 @@ system.islandora_settings: parent: system.admin_config_islandora route_name: system.islandora_settings description: 'Confgure core Islandora settings' + +# Field to RDF property mappings +system.islandora_rdf_mappings: + title: 'RDF field mappings' + parent: system.admin_reports + description: 'List of configured Drupal field to RDF property mappings.' + route_name: system.islandora_rdf_mappings diff --git a/islandora.routing.yml b/islandora.routing.yml index 58dea1a2..297a74f3 100644 --- a/islandora.routing.yml +++ b/islandora.routing.yml @@ -16,6 +16,15 @@ system.islandora_settings: requirements: _permission: 'administer site configuration' +# RDF mappings report +system.islandora_rdf_mappings: + path: '/admin/reports/islandora/rdf_mappings' + defaults: + _controller: '\Drupal\islandora\Controller\RdfMappingsReportController::main' + _title: 'Drupal field to RDF property mappings' + requirements: + _permission: 'administer site configuration' + islandora.add_member_to_node_page: path: '/node/{node}/members/add' defaults: diff --git a/src/Controller/RdfMappingsReportController.php b/src/Controller/RdfMappingsReportController.php new file mode 100644 index 00000000..2b3e3a31 --- /dev/null +++ b/src/Controller/RdfMappingsReportController.php @@ -0,0 +1,73 @@ +getBundleInfo($entity_type); + foreach ($bundles as $name => $attr) { + $markup .= '

' . $attr['label'] . ' (' . $entity_type . ')' . '

'; + $rdf_mappings = rdf_get_mapping($entity_type, $name); + $fields = \Drupal::entityManager()->getFieldDefinitions($entity_type, $name); + $mappings_table_rows = []; + foreach ($fields as $field_name => $field_object) { + $field_mappings = $rdf_mappings->getPreparedFieldMapping($field_name); + if (array_key_exists('properties', $field_mappings)) { + $mappings_table_rows[] = [$field_object->getLabel() . ' (' . $field_name . ')', $field_mappings['properties'][0]]; + } + } + + $mappings_header = [t('Drupal field'), t('RDF property')]; + + if (count($mappings_table_rows) == 0) { + $mappings_header = []; + $mappings_table_rows[] = [t('No RDF mappings configured for @bundle.', ['@bundle' => $attr['label']])]; + } + + $mappings_table = [ + '#theme' => 'table', + '#header' => $mappings_header, + '#rows' => $mappings_table_rows, + ]; + $mappings_table_markup = \Drupal::service('renderer')->render($mappings_table); + $markup .= $mappings_table_markup; + } + } + + $markup .= '

RDF namespaces

'; + $namespaces = rdf_get_namespaces(); + $namespaces_table_rows = []; + foreach ($namespaces as $alias => $namespace_uri) { + $namespaces_table_rows[] = [$alias, $namespace_uri]; + } + $namespaces_table_header = [t('Namespace alias'), t('Namespace URI')]; + $namespaces_table = [ + '#theme' => 'table', + '#header' => $namespaces_table_header, + '#rows' => $namespaces_table_rows, + ]; + $namespaces_table_markup = \Drupal::service('renderer')->render($namespaces_table); + + $markup .= $namespaces_table_markup; + + return ['#markup' => $markup]; + } + +}