Browse Source

Merge pull request #128 from jmacwilliams/6.x

Islandora now uses a hook to populate the list of xslts for object details display
pull/129/merge
Jonathan Green 13 years ago
parent
commit
4114ca1f63
  1. 62
      ObjectDetails.inc

62
ObjectDetails.inc

@ -85,10 +85,10 @@ function fedora_repository_object_details_XSLT($item) {
} }
$proc->setParameter('', 'baseUrl', $base_url); $proc->setParameter('', 'baseUrl', $base_url);
$proc->setParameter('', 'path', $base_url . '/' . $path); $proc->setParameter('', 'path', $path);
$input = NULL; $input = NULL;
$xsl_file = './'. $path .'/'. variable_get('islandora_object_details_xslt_sheet', 'object_details_xslts/convertQDC.xsl'); $xsl_file = variable_get('islandora_object_details_xslt_sheet', 'sites/all/modules/islandora/object_details_xslts/convertQDC.xsl');
// set an error message in case xslt parsing fails // set an error message in case xslt parsing fails
$output = t("Failed to parse xslt file at @xsltFile", array('@xsltFile' => $xsl_file)); $output = t("Failed to parse xslt file at @xsltFile", array('@xsltFile' => $xsl_file));
if (is_readable($xsl_file)) { if (is_readable($xsl_file)) {
@ -160,9 +160,13 @@ function fedora_repository_object_details_table($item) {
} }
/** /**
* Configuration page for the xslt display mode. This mode requires two * Configuration page for the xslt display mode.
* parameters: the datastream to render, and the xslt to apply to it. *
* @return The configuration page. * 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() { function fedora_repository_object_details_XSLT_config() {
$form = array(); $form = array();
@ -171,20 +175,12 @@ function fedora_repository_object_details_XSLT_config() {
'#title' => t("XSLT display options"), '#title' => t("XSLT display options"),
); );
// locate the xslts available $options = module_invoke_all("object_details_get_available_xslts");
$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( $form['config']['xslt'] = array(
'#type' => 'select', '#type' => 'select',
'#title' => t("XSL transform to use"), '#title' => t("XSL transform to use"),
'#default_value' => variable_get('islandora_object_details_xslt_sheet', 'object_details_xslts/convertQDC.xsl'), '#default_value' => variable_get('islandora_object_details_xslt_sheet', 'sites/all/modules/islandora/object_details_xslts/convertQDC.xsl'),
'#options' => $options, '#options' => $options,
'#key_type' => 'associative', '#key_type' => 'associative',
'#required' => TRUE, '#required' => TRUE,
@ -205,18 +201,42 @@ function fedora_repository_object_details_XSLT_config() {
} }
/** /**
* Custom submit handler for the xslt configuration page. * Custom submit handler for the xslt configuration page.
* @param form *
* @pararm form_state The user supplied values for the form. * @param $form
* @param &$form_state
* The user supplied values for the form.
*/ */
function fedora_repository_object_details_XSLT_config_submit($form, &$form_state) { 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_sheet', $form_state['values']['xslt']);
variable_set('islandora_object_details_xslt_datastream', $form_state['values']['dsid']); variable_set('islandora_object_details_xslt_datastream', $form_state['values']['dsid']);
} }
/**
* Base function to supply the available xslt files.
*
* Modules implementing this hook need to return an array describing where the
* XSLT is. The array key is the path to the XSLT (paths start with sites/) and
* the value in the array is the display name. In the simplest form you can use
* file_scan_directory like we do here - this puts the filename as the display
* name and will automatically detect new files as they are added.
*/
function fedora_repository_object_details_get_available_xslts() {
$folder = drupal_get_path("module", "fedora_repository") ."/object_details_xslts/";
// retrieve the filenames from the system
$xslts = file_scan_directory($folder, ".xsl");
$options = array();
foreach ($xslts as $xsl) {
$options[$xsl->filename] = $xsl->basename;
}
return $options;
}
/** /**
* Configuration page for the table display mode. This mode requires only one * Configuration page for the table display mode. This mode requires only one
* parameter: the datastream to render. * parameter: the datastream to render.
* @return The configuration page. *
* @return
* The configuration page.
*/ */
function fedora_repository_object_details_table_config() { function fedora_repository_object_details_table_config() {
$form = array(); $form = array();
@ -242,8 +262,10 @@ function fedora_repository_object_details_table_config() {
/** /**
* Custom submit handler for the table configuration page. * Custom submit handler for the table configuration page.
* @param form *
* @pararm form_state The user supplied values for the form. * @param $form
* @param &$form_state
* The user supplied values for the form.
*/ */
function fedora_repository_object_details_table_config_submit($form, &$form_state) { function fedora_repository_object_details_table_config_submit($form, &$form_state) {
variable_set('islandora_object_details_table_datastream', $form_state['values']['dsid']); variable_set('islandora_object_details_table_datastream', $form_state['values']['dsid']);

Loading…
Cancel
Save