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];
+ }
+
+}