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 @@ - + + @@ -38,7 +63,7 @@ - + : diff --git a/plugins/FedoraObjectDetailedContent.inc b/plugins/FedoraObjectDetailedContent.inc index c193c588..f1d7949b 100644 --- a/plugins/FedoraObjectDetailedContent.inc +++ b/plugins/FedoraObjectDetailedContent.inc @@ -65,7 +65,8 @@ class FedoraObjectDetailedContent { $dc_html = $details_function($this->item); } else { - // problem + // problem - display profile not found + watchdog('fedora_repository', "Error - could not find object details display function @function", array('@function' => $details_function), WATCHDOG_WARNING); } }