diff --git a/includes/add_datastream.form.inc b/includes/add_datastream.form.inc index 62490c9a..1ef1bb33 100644 --- a/includes/add_datastream.form.inc +++ b/includes/add_datastream.form.inc @@ -62,7 +62,7 @@ function islandora_add_datastream_form(array $form, array &$form_state, Abstract '#element_validate' => array('islandora_add_datastream_form_field_does_not_contain_a_forward_slash'), ), 'file' => array( - '#type' => 'managed_file', + '#type' => 'file', '#required' => TRUE, '#title' => t('Upload Document'), '#size' => 48, diff --git a/includes/datastream.versions.inc b/includes/datastream.versions.inc new file mode 100644 index 00000000..5c946aba --- /dev/null +++ b/includes/datastream.versions.inc @@ -0,0 +1,42 @@ +id Previous Versions"); + + $header = array(); + $header[] = array ('data' => 'Created Date'); + $header[] = array('data' => t('Size')); + $header[] = array('data' => t('Label')); + $header[] = array('data' => t('Mime type')); + $rows = array(); + + foreach ($datastream as $version => $datastream_version) { + $row = array(); + $row[] = array( + 'class' => 'datastream-date', + 'data' => theme('islandora_datastream_view_link', array( + 'datastream' => $datastream, + 'label' => $datastream_version->createdDate->format(DATE_RFC850), + 'version' => $version, + )), + ); + $row[] = array( + 'class' => 'datastream-size', + 'data' => islandora_datastream_get_human_readable_size($datastream_version), + ); + $row[] = array( + 'class' => 'datastream-label', + 'data' => $datastream_version->label, + ); + $row[] = array( + 'class' => 'datastream-mime', + 'data' => $datastream_version->mimeType, + ); + $rows[] = $row; + } + + return theme('table', array('header' => $header, 'rows' => $rows)); +} \ No newline at end of file diff --git a/islandora.module b/islandora.module index c579580c..ab79ca9e 100644 --- a/islandora.module +++ b/islandora.module @@ -33,6 +33,7 @@ define('FEDORA_ADD_DS', 'add fedora datastreams'); define('FEDORA_INGEST', 'ingest fedora objects'); define('FEDORA_PURGE', 'delete fedora objects and datastreams'); define('FEDORA_MANAGE_PROPERTIES', 'manage object properties'); +define('ISLANDORA_VIEW_DATASTREAM_HISTORY', 'view old datastream versions'); // Hooks. define('ISLANDORA_VIEW_HOOK', 'islandora_view_object'); @@ -233,6 +234,16 @@ function islandora_menu() { 'access arguments' => array(FEDORA_PURGE, 4), 'load arguments' => array(2), ); + $items['islandora/object/%islandora_object/datastream/%islandora_datastream/versions'] = array( + 'title' => 'Datastream Versions', + 'page arguments' => array(4), + 'page callback' => 'islandora_datastream_versions_table', + 'file' => 'includes/datastream.versions.inc', + 'type' => MENU_CALLBACK, + 'access callback' => 'islandora_datastream_access', + 'access arguments' => array(ISLANDORA_VIEW_DATASTREAM_HISTORY, 4), + 'load arguments' => array(2), + ); $items['islandora/object/%islandora_object/print'] = array( 'title' => 'Print Object', 'page callback' => 'islandora_print_object', @@ -270,6 +281,7 @@ function islandora_admin_paths() { $paths['islandora/object/*/manage*'] = TRUE; $paths['islandora/object/*/delete'] = TRUE; $paths['islandora/object/*/datastream/*/edit'] = TRUE; + $paths['islandora/object/*/datastream/*/versions'] = TRUE; return $paths; } @@ -333,12 +345,16 @@ function islandora_theme() { ), 'islandora_datastream_view_link' => array( 'file' => 'theme/theme.inc', - 'variables' => array('datastream' => NULL), + 'variables' => array('datastream' => NULL, 'version' => NULL, 'label' => NULL), ), 'islandora_datastream_download_link' => array( 'file' => 'theme/theme.inc', 'variables' => array('datastream' => NULL), ), + 'islandora_datastream_version_link' => array( + 'file' => 'theme/theme.inc', + 'variables' => array('datastream' => NULL), + ), ); } @@ -371,6 +387,10 @@ function islandora_permission() { 'title' => t('Manage object properties'), 'description' => t('Modify object labels, owner IDs, and states.'), ), + ISLANDORA_VIEW_DATASTREAM_HISTORY => array( + 'title' => t('View datastream history'), + 'description' => t('View all previous versions of a datastream.'), + ), ); } diff --git a/theme/theme.inc b/theme/theme.inc index f07f95d4..8964960c 100644 --- a/theme/theme.inc +++ b/theme/theme.inc @@ -15,59 +15,71 @@ function islandora_preprocess_islandora_default_edit(array &$variables) { $variables['islandora_editmetadata_url'] = $base_url . '/islandora/edit_form/' . $islandora_object->id; module_load_include('inc', 'islandora', 'includes/datastream'); module_load_include('inc', 'islandora', 'includes/utilities'); - $header = array( - array('data' => t('ID')), - array('data' => t('Label')), - array('data' => t('Type')), - array('data' => t('Mime type')), - array('data' => t('Size')), - array('data' => t('Operations'), 'colspan' => '3'), - ); + $header = array(); + $header[] = array('data' => t('ID')); + $header[] = array('data' => t('Label')); + $header[] = array('data' => t('Type')); + $header[] = array('data' => t('Mime type')); + $header[] = array('data' => t('Size')); + if (user_access(ISLANDORA_VIEW_DATASTREAM_HISTORY)) { + $header[] = array('data' => t('Versions')); + } + + $header[] = array('data' => t('Operations'), 'colspan' => '3'); + $table_attributes = array('class' => array('manage-datastreams')); $rows = array(); foreach ($islandora_object as $ds) { - $rows[] = array( - array( - 'class' => 'datastream-id', - 'data' => theme('islandora_datastream_view_link', array( - 'datastream' => $ds, - )), - ), - array( - 'class' => 'datastream-label', - 'data' => $ds->label, - ), - array( - 'class' => 'datastream-control', - 'data' => islandora_control_group_to_human_readable($ds->controlGroup), - ), - array( - 'class' => 'datastream-mime', - 'data' => $ds->mimeType, - ), - array( - 'class' => 'datastream-size', - 'data' => islandora_datastream_get_human_readable_size($ds), - ), - array( - 'class' => 'datastream-download', - 'data' => theme('islandora_datastream_download_link', array( - 'datastream' => $ds, - )), - ), - array( - 'class' => 'datstream-edit', - 'data' => theme('islandora_datastream_edit_link', array( - 'datastream' => $ds, - )), - ), - array( - 'class' => 'datastream-delete', - 'data' => theme('islandora_datastream_delete_link', array( + $row = array(); + $row[] = array( + 'class' => 'datastream-id', + 'data' => theme('islandora_datastream_view_link', array( + 'datastream' => $ds, + )), + ); + $row[] = array( + 'class' => 'datastream-label', + 'data' => $ds->label, + ); + $row[] = array( + 'class' => 'datastream-control', + 'data' => islandora_control_group_to_human_readable($ds->controlGroup), + ); + $row[] = array( + 'class' => 'datastream-mime', + 'data' => $ds->mimeType, + ); + $row[] = array( + 'class' => 'datastream-size', + 'data' => islandora_datastream_get_human_readable_size($ds), + ); + if (user_access(ISLANDORA_VIEW_DATASTREAM_HISTORY)) { + $row[] = array( + 'class' => 'datastream-versions', + 'data' => theme('islandora_datastream_version_link', array( 'datastream' => $ds, )), - ), + ); + } + $row[] = array( + 'class' => 'datastream-download', + 'data' => theme('islandora_datastream_download_link', array( + 'datastream' => $ds, + )), ); + $row[] = array( + 'class' => 'datstream-edit', + 'data' => theme('islandora_datastream_edit_link', array( + 'datastream' => $ds, + )), + ); + $row[] = array( + 'class' => 'datastream-delete', + 'data' => theme('islandora_datastream_delete_link', array( + 'datastream' => $ds, + )), + ); + $rows[] = $row; } $caption = $islandora_object->label . ' - ' . $islandora_object->id; $table = array( @@ -261,10 +273,28 @@ function theme_islandora_datastream_view_link(array $vars) { $datastream = $vars['datastream']; module_load_include('inc', 'islandora', 'includes/utilities'); - $label = check_plain($datastream->id); - return islandora_datastream_access(FEDORA_VIEW_OBJECTS, $datastream) ? - l($label, islandora_datastream_get_url($datastream, 'view')) : - $label; + if($vars['label'] === NULL) { + $label = check_plain($datastream->id); + } + else { + $label = check_plain($vars['label']); + } + + if($vars['version'] === NULL) { + $perm = FEDORA_VIEW_OBJECTS; + $query = array(); + } + else { + $perm = ISLANDORA_VIEW_DATASTREAM_HISTORY; + $query = array('version' => $vars['version']); + } + + if (islandora_datastream_access($perm, $datastream)) { + return l($label, islandora_datastream_get_url($datastream, 'view'), array('query' => $query)); + } + else { + return $label; + } } /** @@ -304,3 +334,17 @@ function theme_islandora_datastream_edit_link(array $vars) { l(t('edit'), "islandora/object/{$datastream->parent->id}/datastream/{$datastream->id}/edit") : ''; } + +function theme_islandora_datastream_version_link(array $vars) { + $datastream = $vars['datastream']; + module_load_include('inc', 'islandora', 'includes/utilities'); + + $see_history = islandora_datastream_access(ISLANDORA_VIEW_DATASTREAM_HISTORY, $datastream); + + if($see_history) { + return l(count($datastream), "islandora/object/{$datastream->parent->id}/datastream/{$datastream->id}/versions"); + } + else { + return ''; + } +} \ No newline at end of file