diff --git a/ObjectDetails.inc b/ObjectDetails.inc
index 96349868..bc6bf02f 100644
--- a/ObjectDetails.inc
+++ b/ObjectDetails.inc
@@ -1,5 +1,17 @@
array(
@@ -29,11 +41,25 @@ function fedora_repository_islandora_object_details_display() {
return $profiles;
}
+/**
+ * The renderer for the "hidden" display mode. In this mode, no data is
+ * displayed. This is supplied so you can disable the object details metadata
+ * display without disabling the tab entirely.
+ * @param item The item with the metadata to display.
+ * @return The fully composed object details metadata display.
+ */
function fedora_repository_object_details_hidden($item) {
// do nothing
return "";
}
+/**
+ * The renderer for the "xslt" display mode. In this mode, an xslt is applied
+ * to the selected datastream to produce a user defined look and feel to the
+ * output data.
+ * @param item The item with the metadata to display.
+ * @return The fully composed object details metadata display.
+ */
function fedora_repository_object_details_XSLT($item) {
global $base_url;
$path = drupal_get_path('module', 'fedora_repository');
@@ -47,13 +73,13 @@ function fedora_repository_object_details_XSLT($item) {
$xmlstr = $item->get_datastream_dissemination($dsid);
if (empty($xmlstr)) {
- return '';
+ return t('Error - could not find datastream @dsid on object @pid
Please contact the site administrator.',
+ array('@dsid' => $dsid, '@pid' => $item->pid));
}
try {
$proc = new XsltProcessor();
} catch (Exception $e) {
- drupal_set_message($e->getMessage(), 'error');
watchdog('fedora_repository', "Error while creating XSLT processor: @e", array('@e' => $e->getMessage()), WATCHDOG_ERROR);
return;
}
@@ -61,25 +87,34 @@ function fedora_repository_object_details_XSLT($item) {
$proc->setParameter('', 'baseUrl', $base_url);
$proc->setParameter('', 'path', $base_url . '/' . $path);
$input = NULL;
-
- $xsl_file = './'. $path .'/'. variable_get('islandora_object_details_xslt_sheet', 'xsl/convertQDC.xsl');
+
+ $xsl_file = './'. $path .'/'. variable_get('islandora_object_details_xslt_sheet', 'object_details_xslts/convertQDC.xsl');
+ // set an error message in case xslt parsing fails
+ $output = t("Failed to parse xslt file at @xsltFile", array('@xsltFile' => $xsl_file));
if (is_readable($xsl_file)) {
- $xsl = new DOMDocument();
- $xsl->load($xsl_file);
- $input = new DOMDocument();
- $input->loadXML(trim($xmlstr));
- $xsl = $proc->importStylesheet($xsl);
- $newdom = $proc->transformToDoc($input);
- $output = $newdom->saveHTML();
- return $output;
- }
- else {
- watchdog('fedora_repository', 'The XSLT file @xslt_name is not readable.', array(
- '@xslt_name' => $xsl_file,
- ));
+ $xsl = new DomDocument();
+ $input = new DomDocument();
+ try {
+ $xsl->load($xsl_file);
+
+ $input->loadXML(trim($xmlstr));
+ } catch (Exception $e) {
+ watchdog('fedora_repository', "Problem loading XSL file: @e", array('@e' => $e->getMessage()), NULL, WATCHDOG_ERROR);
+ }
+ $xsl = $proc->importStylesheet($xsl);
+ $newdom = $proc->transformToDoc($input);
+ $output = $newdom->saveHTML();
}
+ return $output;
}
+/**
+ * The renderer for the "table" display mode. In this mode, the requested
+ * datastream is rendered using a simple table with keys(tags) on the left and
+ * values on the right.
+ * @param item The item with the metadata to display.
+ * @return The fully composed object details metadata display.
+ */
function fedora_repository_object_details_table($item) {
global $base_url;
$path = drupal_get_path('module', 'fedora_repository');
@@ -93,7 +128,8 @@ function fedora_repository_object_details_table($item) {
$xmlstr = $item->get_datastream_dissemination($dsid);
if (empty($xmlstr)) {
- return '';
+ return t('Error - could not find datastream @dsid on object @pid
Please contact the site administrator.',
+ array('@dsid' => $dsid, '@pid' => $item->pid));
}
$simplexml = new SimpleXMLElement($xmlstr);
@@ -123,7 +159,11 @@ function fedora_repository_object_details_table($item) {
return theme('table', $headers, $rows, array('class' => 'dc-table'));
}
-// configuration pages
+/**
+ * Configuration page for the xslt display mode. This mode requires two
+ * parameters: the datastream to render, and the xslt to apply to it.
+ * @return The configuration page.
+ */
function fedora_repository_object_details_XSLT_config() {
$form = array();
$form['config'] = array(
@@ -131,10 +171,22 @@ function fedora_repository_object_details_XSLT_config() {
'#title' => t("XSLT display options"),
);
+ // locate the xslts available
+ $xslt_folder = "object_details_xslts/";
+ $folder = drupal_get_path("module", "fedora_repository") ."/". $xslt_folder;
+ // retrieve the filenames from the system
+ $xslts = file_scan_directory($folder, ".xsl");
+ $options = array();
+ foreach ($xslts as $xsl) {
+ $options[$xslt_folder . $xsl->basename] = $xsl->basename;
+ }
+
$form['config']['xslt'] = array(
- '#type' => 'textfield',
+ '#type' => 'select',
'#title' => t("XSL transform to use"),
- '#default_value' => variable_get('islandora_object_details_xslt_sheet', 'xsl/convertQDC.xsl'),
+ '#default_value' => variable_get('islandora_object_details_xslt_sheet', 'object_details_xslts/convertQDC.xsl'),
+ '#options' => $options,
+ '#key_type' => 'associative',
'#required' => TRUE,
);
$form['config']['dsid'] = array(
@@ -151,7 +203,21 @@ function fedora_repository_object_details_XSLT_config() {
return $form;
}
+/**
+ * Custom submit handler for the xslt configuration page.
+ * @param form
+ * @pararm form_state The user supplied values for the form.
+ */
+function fedora_repository_object_details_XSLT_config_submit($form, &$form_state) {
+ variable_set('islandora_object_details_xslt_sheet', $form_state['values']['xslt']);
+ variable_set('islandora_object_details_xslt_datastream', $form_state['values']['dsid']);
+}
+/**
+ * Configuration page for the table display mode. This mode requires only one
+ * parameter: the datastream to render.
+ * @return The configuration page.
+ */
function fedora_repository_object_details_table_config() {
$form = array();
$form['config'] = array(
@@ -174,11 +240,11 @@ function fedora_repository_object_details_table_config() {
return $form;
}
-function fedora_repository_object_details_XSLT_config_submit($form, &$form_state) {
- variable_set('islandora_object_details_xslt_sheet', $form_state['values']['xslt']);
- variable_set('islandora_object_details_xslt_datastream', $form_state['values']['dsid']);
-}
-
+/**
+ * Custom submit handler for the table configuration page.
+ * @param form
+ * @pararm form_state The user supplied values for the form.
+ */
function fedora_repository_object_details_table_config_submit($form, &$form_state) {
variable_set('islandora_object_details_table_datastream', $form_state['values']['dsid']);
}
diff --git a/formClass.inc b/formClass.inc
index c7d57843..fc3b1748 100644
--- a/formClass.inc
+++ b/formClass.inc
@@ -317,11 +317,19 @@ class formClass {
$profiles = module_invoke_all("islandora_object_details_display");
$display_options = array();
- foreach ($profiles as $machine_name => $profile) {
- $display_options[$machine_name] = $profile['name'];
- $config_path = $profile['config'];
- if (isset($config_path) && $config_path != ""){
- $display_options[$machine_name] .= " (". l("config", $config_path, array()) .")";
+ // suppress php warnings from empty lists
+ if ($profiles) {
+ foreach ($profiles as $machine_name => $profile) {
+ // make sure the name exists (the bare minimum)
+ if (array_key_exists('name', $profile)) {
+ $display_options[$machine_name] = $profile['name'];
+ if (array_key_exists('config', $profile)) {
+ $config_path = $profile['config'];
+ if (isset($config_path) && $config_path != "") {
+ $display_options[$machine_name] .= " (". l("config", $config_path, array()) .")";
+ }
+ }
+ }
}
}
$form['tabs']['islandora_object_details_display_table'] = array(
@@ -362,10 +370,10 @@ class formClass {
'#description' => t('When enabled, restricts access to fedora object datastreams that are not listed in the Islandora Content Model for the object (unless the user is an administrator).'),
);
- $form['advanced']['fedora_repository_use_imagecache_external_in_collection_view'] = array(
- '#type' => 'checkbox',
- '#title' => t('Allow imagecache_external use for thumbnails in collection view'),
- '#default_value' => variable_get('fedora_repository_use_imagecache_external_in_collection_view', FALSE),
+ $form['advanced']['fedora_repository_use_imagecache_external_in_collection_view'] = array(
+ '#type' => 'checkbox',
+ '#title' => t('Allow imagecache_external use for thumbnails in collection view'),
+ '#default_value' => variable_get('fedora_repository_use_imagecache_external_in_collection_view', FALSE),
'#description' => t('If enabled, the default collection list view (or ' .
'anywhere the function "@function" is used) will try to use ' .
'imagecache_external, defaulting to the "@preset" preset. XSLTs may ' .
@@ -374,7 +382,7 @@ class formClass {
'@function' => '_fedora_repository_render_image()',
'@preset' => 'fedora_repository_collection_thumbnail',
'@xsl' => 'sparql_to_html.xsl',
- )),
+ )),
);
$form['advanced']['fedora_collection_display_list'] = array(
diff --git a/object_details_xslts/convertQDC.xsl b/object_details_xslts/convertQDC.xsl
new file mode 100644
index 00000000..5d881e35
--- /dev/null
+++ b/object_details_xslts/convertQDC.xsl
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+
+
+MetaData |
+
+
+
+
+
+ |
+
+
+ =
+
+
+ |
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/xsl/mods2html.xsl b/object_details_xslts/mods2html.xsl
similarity index 94%
rename from xsl/mods2html.xsl
rename to object_details_xslts/mods2html.xsl
index 194fcec2..3f794523 100644
--- a/xsl/mods2html.xsl
+++ b/object_details_xslts/mods2html.xsl
@@ -3,11 +3,36 @@
-
+
@@ -16,8 +41,8 @@
-
+
+