Browse Source

Merge pull request #637 from matthewperry/7.x-ISLANDORA-1547

ISLANDORA-1547
pull/639/head
Nick Ruest 9 years ago
parent
commit
e2a5f08330
  1. 7
      includes/datastream.inc
  2. 20
      includes/utilities.inc
  3. 24
      islandora.api.php
  4. 1
      islandora.module
  5. 3
      theme/theme.inc

7
includes/datastream.inc

@ -294,7 +294,9 @@ function islandora_datastream_get_url(AbstractDatastream $datastream, $type = 'd
* The datastream to edit.
*/
function islandora_edit_datastream(AbstractDatastream $datastream) {
$edit_registry = module_invoke_all('islandora_edit_datastream_registry', $datastream->parent, $datastream);
module_load_include('inc', 'islandora', 'includes/utilities');
$edit_registry = islandora_build_datastream_edit_registry($datastream);
$edit_count = count($edit_registry);
switch ($edit_count) {
case 0:
@ -305,7 +307,8 @@ function islandora_edit_datastream(AbstractDatastream $datastream) {
case 1:
// One registry implementation, go there.
drupal_goto($edit_registry[0]['url']);
$entry = reset($edit_registry);
drupal_goto($entry['url']);
break;
default:

20
includes/utilities.inc

@ -946,3 +946,23 @@ function islandora_deployed_on_windows() {
}
return FALSE;
}
/**
* Build the edit registry for a given datastream.
*
* @param AbstractDatastream $datastream
* The datastream being edited.
*
* @return array
* The built edit registry array.
*/
function islandora_build_datastream_edit_registry(AbstractDatastream $datastream) {
$edit_registry = module_invoke_all(ISLANDORA_EDIT_DATASTREAM_REGISTRY_HOOK, $datastream->parent, $datastream);
$context = array(
'object' => $datastream->parent,
'datastream' => $datastream,
'original_edit_registry' => $edit_registry,
);
drupal_alter(ISLANDORA_EDIT_DATASTREAM_REGISTRY_HOOK, $edit_registry, $context);
return $edit_registry;
}

24
islandora.api.php

@ -849,3 +849,27 @@ function hook_islandora_get_breadcrumb_query_predicates() {
'someotherpredicate',
);
}
/**
* Use alter hook to modify registry paths before the paths are rendered.
*
* @param array $edit_registry
* The array of registry paths.
* @param array $context
* An associative array containing:
* - object: The object that owns the datastream being edited.
* - datastream: The datastream being edited.
* - original_edit_registry: The original edit_registry prior to any
* modifications.
*/
function hook_islandora_edit_datastream_registry_alter(&$edit_registry, $context) {
// Example: Remove xml form builder edit registry.
if (isset($edit_registry['xml_form_builder_edit_form_registry'])) {
unset($edit_registry['xml_form_builder_edit_form_registry']);
}
// Add custom form to replace the removed form builder edit_form.
$edit_registry['somemodule_custom_form'] = array(
'name' => t('Somemodule Custom Form'),
'url' => "islandora/custom_form/{$context['object']->id}/{$context['datastream']->id}"
);
}

1
islandora.module

@ -52,6 +52,7 @@ define('ISLANDORA_UPDATE_RELATED_OBJECTS_PROPERTIES_HOOK', 'islandora_update_rel
define('ISLANDORA_METADATA_OBJECT_ALTER', 'islandora_metadata_object');
define('ISLANDORA_METADATA_OBJECT_DESCRIPTION_ALTER', 'islandora_metadata_object_description');
define('ISLANDORA_BREADCRUMB_FILTER_PREDICATE_HOOK', 'islandora_get_breadcrumb_query_predicates');
define('ISLANDORA_EDIT_DATASTREAM_REGISTRY_HOOK', 'islandora_edit_datastream_registry');
// @todo Add Documentation.
define('ISLANDORA_OBJECT_INGESTED_HOOK', 'islandora_object_ingested');

3
theme/theme.inc

@ -533,8 +533,9 @@ function theme_islandora_datastream_revert_link(array $vars) {
*/
function theme_islandora_datastream_edit_link(array $vars) {
$datastream = $vars['datastream'];
module_load_include('inc', 'islandora', 'includes/utilities');
$edit_registry = module_invoke_all('islandora_edit_datastream_registry', $datastream->parent, $datastream);
$edit_registry = islandora_build_datastream_edit_registry($datastream);
$can_edit = count($edit_registry) > 0 && islandora_datastream_access(ISLANDORA_METADATA_EDIT, $datastream);

Loading…
Cancel
Save