diff --git a/BatchIngest.inc b/BatchIngest.inc
new file mode 100644
index 00000000..2f3f6e57
--- /dev/null
+++ b/BatchIngest.inc
@@ -0,0 +1,241 @@
+pid != "islandora:collectionCModel") {
+ $cm_options[$content_model->pid] = $content_model->name;
+ $name_mappings[] = $content_model->pid . '^' . $content_model->pid_namespace;
+ }
+ }
+ $mappings = implode('~~~', $name_mappings);
+ $form['#attributes']['enctype'] = 'multipart/form-data';
+
+ $form['titlebox'] = array(
+ '#type' => 'item',
+ '#value' => t("Batch ingest into $collection_pid"),
+ );
+
+ $form['collection_pid'] = array(
+ '#type' => 'hidden',
+ '#value' => $collection_pid,
+ );
+ $form['namespace_mappings'] = array(
+ '#type' => 'hidden',
+ '#value' => $mappings,
+ );
+ $form['metadata_type'] = array(
+ '#title' => "Choose Metadata Type",
+ '#type' => 'radios',
+ '#options' => array('MODS' => 'MODS', "DC" => "DUBLIN CORE"),
+ '#required' => true,
+ '#description' => t("Select primary metadata schema"),
+ );
+ $form['content_model'] = array(
+ '#title' => "Choose content model to be associated with objects ingested",
+ '#type' => 'select',
+ '#options' => $cm_options,
+ '#required' => true,
+ '#description' => t("Content models describe the behaviours of objects with which they are associated."),
+ );
+ $form['indicator']['file-location'] = array(
+ '#type' => 'file',
+ '#title' => t('Upload zipped folder'),
+ '#size' => 48,
+ '#description' => t('The zipped folder should contain all files necessary to build objects.
+ Related files must have the same filename, but with differing extensions to indicate mimetypes.
+ ie. myFile.xml and myFile.jpg'),
+ );
+
+ $form['submit'] = array(
+ '#type' => 'submit',
+ '#value' => t('Create Objects ')
+ );
+
+
+ return($form);
+}
+
+function batch_creation_form_validate($form, &$form_state) {
+
+ $fieldName = 'file-location';
+ if (isset($_FILES['files']) && is_uploaded_file($_FILES['files']['tmp_name'][$fieldName])) {
+ $file = file_save_upload($fieldName);
+ if ($file->filemime != 'application/zip') {
+ form_set_error($fieldName, 'Input file must be a .zip file');
+ return;
+ }
+ if (!$file) {
+ form_set_error($fieldName, 'Error uploading file.');
+ return;
+ }
+ $form_state['values']['file'] = $file;
+ }
+ else {
+ // set error
+ form_set_error($fieldName, 'Error uploading file.');
+ return;
+ }
+}
+
+function batch_creation_form_submit($form, &$form_state) {
+ module_load_include('inc', 'fedora_repository', 'ContentModel');
+ module_load_include('inc', 'fedora_repository', 'api/fedora_item');
+ global $user;
+ $namespace_mappings = array();
+ $content_model = $form_state['values']['content_model'];
+ $metadata = $form_state['values']['metadata_type'];
+ $collection_pid = $form_state['values']['collection_pid'];
+ $namespace_process = explode('~~~', $form_state['values']['namespace_mappings']);
+ foreach ($namespace_process as $line) {
+ $line_parts = explode('^', $line);
+ $namespace_mappings[$line_parts[0]] = $line_parts[1];
+ }
+ $namespace = $namespace_mappings[$content_model];
+ $namespace = preg_replace('/:.*/', '', $namespace);
+ $dirName = "temp" . $user->uid;
+ $tmpDir = file_directory_path() . '/' . $dirName . '/';
+ mkdir($tmpDir);
+ $file = $form_state['values']['file'];
+ $fileName = $file->filepath;
+ $file_list = array();
+ $cmdString = "unzip -q -o -d $tmpDir \"$fileName\"";
+ system($cmdString, $retVal);
+ $dirs = array();
+ $doNotAdd = array('.', '..', '__MACOSX');
+ array_push($dirs, $tmpDir);
+ $files = scandir($tmpDir);
+ foreach ($files as $file) {
+ if (is_dir("$tmpDir/$file") & !in_array($file, $doNotAdd)) {
+ array_push($dirs, $tmpDir . $file);
+ }
+ }
+ foreach ($dirs as $directory) {
+ if ($inputs = opendir($directory)) {
+ while (FALSE !== ($file_name = readdir($inputs))) {
+ if (!in_array($file_name, $doNotAdd) && is_dir($file_name) == FALSE) {
+ $ext = strrchr($file_name, '.');
+ $base = preg_replace("/$ext$/", '', $file_name);
+ $ext = substr($ext, 1);
+ if ($ext) {
+ $file_list[$base][$ext] = "$directory/" . $file_name;
+ }
+ }
+ }
+ closedir($inputs);
+ }
+ }
+
+ /**
+ * use the content model class to construct a class representing the selected content model
+ * call execIngestmethods on each mimetype passed in
+ */
+ if (($cm = ContentModel::loadFromModel($content_model, 'ISLANDORACM')) === FALSE) {
+ drupal_set_message("$content_model not found", "error");
+ return;
+ }
+
+ $batch = array(
+ 'title' => 'Ingesting Objects',
+ 'operations' => array(),
+ 'file' => drupal_get_path('module', 'fedora_repository') . '/BatchIngest.inc',
+ );
+
+
+ foreach ($file_list as $label => $object_files) {
+ if ($object_files['xml']) {
+ $batch['operations'][] = array('create_batch_objects', array($label, $content_model, $object_files, $collection_pid, $namespace, $metadata));
+ }
+ }
+ $batch['operations'][] = array('recursive_directory_delete', array($tmpDir));
+ batch_set($batch);
+ batch_process();
+}
+
+function create_batch_objects($label, $content_model, $object_files, $collection_pid, $namespace, $metadata) {
+ module_load_include('inc', 'fedora_repository', 'ContentModel');
+ module_load_include('inc', 'fedora_repository', 'MimeClass');
+ $cm = ContentModel::loadFromModel($content_model, 'ISLANDORACM');
+ $allowedMimeTypes = $cm->getMimetypes();
+ $mime_helper = new MimeClass();
+ $pid = fedora_item::get_next_PID_in_namespace($namespace);
+ module_load_include('inc', 'fedora_reppository', 'api/fedora_item');
+ $item = Fedora_item::ingest_new_item($pid, 'A', $label, $owner);
+ $item->add_relationship('hasModel', $content_model, FEDORA_MODEL_URI);
+ $item->add_relationship('isMemberOfCollection', $collection_pid);
+ if ($metadata == 'DC') {
+ $dc_xml = file_get_contents($object_files['xml']);
+ $item->modify_datastream_by_value($dc_xml, 'DC', "Dublin Core", 'text/xml');
+ }
+ if ($metadata == 'MODS') {
+ $mods_xml = file_get_contents($object_files['xml']);
+ $item->add_datastream_from_string($mods_xml, 'MODS');
+ $dc_xml = batch_create_dc_from_mods($mods_xml);
+ }
+ unset($object_files['xml']);
+ $use_primary = TRUE;
+ foreach ($object_files as $ext => $filename) {
+ $file_mimetype = $mime_helper->get_mimetype($filename);
+ if (in_array($file_mimetype, $allowedMimeTypes)) {
+ $added = $cm->execIngestRules($filename, $file_mimetype);
+ }
+ else {
+ $item->purge("$pid $label not ingested. $file_mimetype not permitted in objects associated with $content_model");
+ continue;
+ }
+ $ds_label = $use_primary ? $cm->getDatastreamNameDSID():$ext;
+ $item->add_datastream_from_file($filename, $ds_label);
+ $use_primary = FALSE;
+
+ if (!empty($_SESSION['fedora_ingest_files'])) {
+ foreach ($_SESSION['fedora_ingest_files'] as $dsid => $datastream_file) {
+ $item->add_datastream_from_file($datastream_file, $dsid);
+ }
+ }
+ }
+}
+
+function batch_create_dc_from_mods($mods_xml) {
+ $path = drupal_get_path('module', 'fedora_repository');
+ module_load_include('inc', 'fedora_repository', 'ObjectHelper');
+ module_load_include('inc', 'fedora_repository', 'CollectionClass');
+
+ if ($xmlstr == NULL || strlen($xmlstr) < 5) {
+ return " ";
+ }
+
+ try {
+ $proc = new XsltProcessor();
+ } catch (Exception $e) {
+ drupal_set_message(t("!e", array('!e' => $e->getMessage())), 'error');
+ return " ";
+ }
+
+ $xsl = new DomDocument();
+ $xsl->load($path . '/xsl/mods_to_dc.xsl');
+ $input = new DomDocument();
+ $input->loadXML(trim($xmlstr));
+ $xsl = $proc->importStylesheet($xsl);
+ $newdom = $proc->transformToDoc($input);
+ $dc_xml = $newdom->saveXML();
+
+ return $dc_xml;
+}
+
+
+function recursive_directory_delete($dir) {
+ if (!file_exists($dir))
+ return true;
+ if (!is_dir($dir))
+ return unlink($dir);
+ foreach (scandir($dir) as $item) {
+ if ($item == '.' || $item == '..')
+ continue;
+ if (!recursive_directory_delete($dir . DIRECTORY_SEPARATOR . $item))
+ return false;
+ }
+ return rmdir($dir);
+}
\ No newline at end of file
diff --git a/CollectionClass.inc b/CollectionClass.inc
index f537a3cc..4251eea4 100644
--- a/CollectionClass.inc
+++ b/CollectionClass.inc
@@ -499,6 +499,7 @@ class CollectionClass {
function showFieldSets($page_number) {
module_load_include('inc', 'fedora_repository', 'api/fedora_item');
module_load_include('inc', 'fedora_repository', 'CollectionManagement');
+ module_load_include('inc', 'fedora_repository', 'BatchIngest');
global $base_url;
$tabset = array();
global $user;
@@ -525,23 +526,24 @@ class CollectionClass {
if (!$show_ingest_tab) {
$view_selected = true;
}
-
+ if(!$collection_items){
+ $view_selected = false;
+ $add_selected = true;
+ }
$view_selected = !$show_ingest_tab;
- drupal_set_message();
-
$tabset['view_tab'] = array(
'#type' => 'tabpage',
'#title' => 'View',
'#selected' => $view_selected,
- '#content' => $collection_items
+ '#content' => $collection_items,
+
);
$tabset['add_tab'] = array(
- // #type and #title are the minimum requirements.
'#type' => 'tabpage',
'#title' => t('Add'),
- '#selected' => $show_ingest_tab,
+ '#selected' => $add_selected,
// This will be the content of the tab.
'#content' => $add_to_collection,
);
@@ -552,9 +554,10 @@ class CollectionClass {
'#title' => t('Manage This Collection'),
// This will be the content of the tab.
'#content' => drupal_get_form('collection_management_form', $this->pid, $content_models),
+ '#selected' => false,
);
}
- if ($show_batch_tab) {
+ if ($show_batch_tab && user_access('create batch process')) {
$tabset['batch_ingest_tab'] = array(
// #type and #title are the minimum requirements.
'#type' => 'tabpage',
@@ -672,189 +675,3 @@ class CollectionClass {
}
-function batch_creation_form(&$form_state, $collection_pid, $content_models) {
- module_load_include('inc', 'fedora_repository', 'api/fedora_utils');
- module_load_include('inc', 'fedora_repository', 'CollectionPolicy');
- $cm_options = array();
- $name_mappings = array();
- foreach ($content_models as $content_model) {
- if ($content_model->pid != "islandora:collectionCModel") {
- $cm_options[$content_model->pid] = $content_model->name;
- $name_mappings[] = $content_model->pid . '^' . $content_model->pid_namespace;
- }
- }
- $mappings = implode('~~~', $name_mappings);
- $form['#attributes']['enctype'] = 'multipart/form-data';
-
- $form['titlebox'] = array(
- '#type' => 'item',
- '#value' => t("Batch ingest into $collection_pid"),
- );
-
- $form['parent_collection'] = array(
- '#type' => 'hidden',
- '#value' => $collection_pid,
- );
- $form['namespace_mappings'] = array(
- '#type' => 'hidden',
- '#value' => $mappings,
- );
- $form['metadata_type'] = array(
- '#title' => "Choose Metadata Type",
- '#type' => 'radios',
- '#options' => array('MODS' => 'MODS', "DC" => "DUBLIN CORE"),
- '#required' => true,
- '#description' => t("Select primary metadata schema"),
- );
- $form['content_model'] = array(
- '#title' => "Choose content model to be associated with objects ingested",
- '#type' => 'select',
- '#options' => $cm_options,
- '#required' => true,
- '#description' => t("Content models describe the behaviours of objects with which they are associated."),
- );
- $form['indicator']['file-location'] = array(
- '#type' => 'file',
- '#title' => t('Upload zipped folder'),
- '#size' => 48,
- '#description' => t('The zipped folder should contain all files necessary to build objects.
- Related files must have the same filename, but with diffening extensions to indicate mimetypes.
- ie. myFile.xml and myFile.jpg'),
- );
-
- $form['submit'] = array(
- '#type' => 'submit',
- '#value' => t('Submit')
- );
-
-
- return($form);
-}
-
-function batch_creation_form_validate($form, &$form_state) {
-
- $fieldName = 'file-location';
- if (isset($_FILES['files']) && is_uploaded_file($_FILES['files']['tmp_name'][$fieldName])) {
- $file = file_save_upload($fieldName);
- if ($file->filemime != 'application/zip') {
- form_set_error($fieldName, 'Input file must be a .zip file');
- return;
- }
- if (!$file) {
- form_set_error($fieldName, 'Error uploading file.');
- return;
- }
- $form_state['values']['file'] = $file;
- }
- else {
- // set error
- form_set_error($fieldName, 'Error uploading file.');
- return;
- }
-}
-
-function batch_creation_form_submit($form, &$form_state) {
- module_load_include('inc', 'fedora_repository', 'ContentModel');
- global $user;
- $namespace_mappings = array();
- $content_model = $form_state['values']['content_model'];
- $metadata = $form_state['values']['meta_data_type'];
- $namespace_process = explode('~~~', $form_state['values']['namespace_mappings']);
- foreach ($namespace_process as $line) {
- $line_parts = explode('^', $line);
- $namespace_mappings[$line_parts[0]] = $line_parts[1];
- }
- $namespace = $namespace_mappings[$content_model];
- $dirName = "temp" . $user->uid;
- $tmpDir = file_directory_path() . '/' . $dirName . '/';
- mkdir($tmpDir);
- $file = $form_state['values']['file'];
- $fileName = $file->filepath;
- $file_list = array();
- $cmdString = "unzip -q -o -d $tmpDir \"$fileName\"";
- system($cmdString, $retVal);
- $dirs = array();
- $doNotAdd = array('.', '..', '__MACOSX');
- array_push($dirs, $tmpDir);
- $files = scandir($tmpDir);
- foreach ($files as $file) {
- if (is_dir("$tmpDir/$file") & !in_array($file, $doNotAdd)) {
- array_push($dirs, $tmpDir . $file);
- }
- }
-
- foreach ($dirs as $directory) {
- if ($inputs = opendir($directory)) {
- while (FALSE !== ($file_name = readdir($inputs))) {
- if (!in_array($file_name, $doNotAdd)) {
- $ext = strrchr($file_name, '.');
- $base = preg_replace("/$ext$/", '', $file_name);
- $ext = substr($ext, 1);
- $file_list[$base][$ext] = "$directory" . $file_name;
- }
- }
- closedir($inputs);
- }
- }
-
- /**
- * use the content model class to construct a class representing the selected content model
- * call execIngestmethods on each mimetype passed in
- */
- create_fedora_batch($file_list, $content_model, $metadata, $namespace);
-}
-
-function create_fedora_batch($file_list, $content_model, $metadata, $namespace) {
- module_load_include('inc', 'fedora_repository', 'api/fedora_item');
- if (($cm = ContentModel::loadFromModel($content_model, 'ISLANDORACM')) !== FALSE) {
- $allowedMimeTypes = $cm->getMimetypes();
-
- if (!in_array($dformat, $allowedMimeTypes)) {
- form_set_error('ingest-file-location', t('The uploaded file\'s mimetype (' . $dformat . ') is not associated with this Content Model. The allowed types are ' .
- implode(' ', $allowedMimeTypes)));
- return;
- }
- elseif (!$cm->execIngestRules($file, $dformat)) {
- drupal_set_message(t('Error following Content Model Rules'), 'error');
- foreach (ContentModel::$errors as $err) {
- drupal_set_message($err, 'error');
- }
- }
- }
-
- $batch = array(
- 'title' => 'Ingesting Objects',
- 'operations' => array(),
- 'file' => drupal_get_path('module', 'fedora_repository') . '/CollectionClass.inc',
- );
-
-
- foreach ($file_list as $label => $object_files) {
-
- $batch['operations'][] = array('create_fedora_objects', array($label, $content_model, $object_files, $collection_pid, $metadata));
- }
-
- batch_set($batch);
-}
-
-function create_fedora_objects($lable, $content_model, $object_files, $collection_pid, $namespace, $metadata, $content_model) {
- $namespace = preg_replace('/:.*/', '', $namespace);
- $pid = fedora_item::get_next_PID_in_namespace($namespace);
- module_load_include('inc', 'fedora_reppository', 'api/fedora_item');
- $item = Fedora_item::ingest_new_item($pid, 'A', $label, $owner);
- $item->add_relationship('hasModel', $content_model, FEDORA_MODEL_URI);
- if ($metadata == 'DC') {
- $dc_xml = file_get_contents($object_files['xml']);
- $object_files['xml'] = null;
- $item->modify_datastream_by_value($dc_xml, 'DC', "Dublin Core", 'tex/xml');
- }
- if ($metadata == 'MODS') {
- $item->add_datastream_from_file($object_files['xml'], 'MODS');
- //add crosswalk to dc logic
- }
-
- foreach ($object_files as $file) {
-
- }
-}
-
diff --git a/CollectionManagement.inc b/CollectionManagement.inc
index aac1fc69..8b2c04d1 100644
--- a/CollectionManagement.inc
+++ b/CollectionManagement.inc
@@ -7,7 +7,7 @@
* @param string $content_models
* @return array
*/
-function collection_management_form(&$form_state, $parent_collection_pid, $content_models) {
+function collection_management_form(&$form_state, $this_collection_pid, $content_models) {
module_load_include('inc', 'fedora_repository', 'api/fedora_utils');
$restricted = FALSE;
if (variable_get('fedora_namespace_restriction_enforced', true)) {
@@ -22,7 +22,7 @@ function collection_management_form(&$form_state, $parent_collection_pid, $conte
}
module_load_include('inc', 'fedora_repository', 'api/fedora_utils');
module_load_include('inc', 'fedora_repository', 'CollectionPolicy');
- $item = new Fedora_Item($parent_collection_pid);
+ $item = new Fedora_Item($this_collection_pid);
$collection_name = $item->objectProfile->objLabel;
$new_content_models = get_content_models_as_option_array();
$cm_options = array();
@@ -43,7 +43,7 @@ function collection_management_form(&$form_state, $parent_collection_pid, $conte
$form['child_creation']['titlebox'] = array(
'#type' => 'item',
- '#value' => t("Create New Child Collection within $parent_collection_pid"),
+ '#value' => t("Create New Child Collection within $this_collection_pid"),
);
$form['child_creation']['collection_name'] = array(
@@ -75,11 +75,14 @@ function collection_management_form(&$form_state, $parent_collection_pid, $conte
'#description' => t("Namespace for objects in this collection."),
);
}
- $form['child_creation']['parent_collection'] = array(
+ $form['parent_collection'] = array(
'#type' => 'hidden',
- '#value' => $parent_collection_pid,
+ '#value' => $this_collection_pid,
+ );
+ $form['collection_pid'] = array(
+ '#type' => 'hidden',
+ '#value' => $this_collection_pid,
);
-
$form['child_creation']['content_models'] = array(
'#title' => "Choose allowable content models for this collection",
'#type' => 'checkboxes',
@@ -101,7 +104,7 @@ function collection_management_form(&$form_state, $parent_collection_pid, $conte
);
$form['change_cmodel']['titlebox'] = array(
'#type' => 'item',
- '#value' => t("Change Content Models within $parent_collection_pid"),
+ '#value' => t("Change Content Models within $this_collection_pid"),
);
$form['change_cmodel']['current_content_model'] = array(
@@ -118,7 +121,7 @@ function collection_management_form(&$form_state, $parent_collection_pid, $conte
);
$form['change_cmodel']['collection_pid'] = array(
'#type' => 'hidden',
- '#value' => $parent_collection_pid,
+ '#value' => $this_collection_pid,
);
$form['change_cmodel']['submit'] = array(
'#type' => 'submit',
@@ -129,7 +132,7 @@ function collection_management_form(&$form_state, $parent_collection_pid, $conte
$form['delete_collection'] = array(
'#title' => "Permanently Delete $collection_name",
'#type' => 'fieldset',
- '#description' => t("Clicking this button will delete $collection_name and all objects within.
This action cannot be undone."),
+ '#description' => t("Clicking this button will delete all objects within $collection_name.
This action cannot be undone."),
'#collapsible' => TRUE,
'#collapsed' => TRUE,
);
@@ -263,14 +266,34 @@ function collection_management_form_submit($form, &$form_state) {
}
if ($form_state['clicked_button']['#id'] == 'delete_collection') {
- $name = $user->name;
- $objects = get_related_items_as_array($collection_pid, $relationship);
- $objects[] = $collection_pid;
- foreach ($objects as $object) {
- $item_to_delete = new Fedora_Item($object);
- $item_to_delete->purge("$object purged by $name");
+ $collection_name = $form_state['values']['collection_name'];
+ $pids = get_related_items_as_array($collection_pid, 'isMemberOfCollection');
+
+ $batch = array(
+ 'title' => "Deleting Objects from $name",
+ 'operations' => array(),
+ 'file' => drupal_get_path('module', 'fedora_repository') . '/CollectionManagement.inc',
+ );
+
+
+ foreach ($pids as $pid) {
+
+ $batch['operations'][] = array('delete_objects_as_batch', array($pid));
}
- drupal_goto('fedora/repository');
+
+ batch_set($batch);
+ batch_process('/fedora/repository');
}
}
+function delete_objects_as_batch($pid) {
+ module_load_include('inc', 'fedora_repository', 'api/fedora_item');
+ $name = $user->name;
+ $item_to_delete = new Fedora_Item($pid);
+ $models = $item_to_delete->get_models();
+ foreach ($models as $model) {
+ if ($model['object'] != 'islandora:collectionCModel') {
+ $item_to_delete->purge("$object purged by $name");
+ }
+ }
+}
\ No newline at end of file
diff --git a/ContentModel.inc b/ContentModel.inc
index 64b71980..ccc0fb82 100644
--- a/ContentModel.inc
+++ b/ContentModel.inc
@@ -4,7 +4,6 @@
* @file
*
*/
-
/**
* @file
* Content Model Class
@@ -396,12 +395,12 @@ class ContentModel extends XMLDatastream {
$rootEl->appendChild($ingest_formEl);
if (isset($sXml->edit_metadata) &&
- trim($sXml->edit_metadata->build_form_method->module) != '' &&
- trim($sXml->edit_metadata->build_form_method->file) != '' &&
- trim($sXml->edit_metadata->build_form_method->class_name) != '' &&
- trim($sXml->edit_metadata->build_form_method->method_name) != '' &&
- trim($sXml->edit_metadata->submit_form_method->method_name) != '' &&
- trim($sXml->edit_metadata->build_form_method['dsid']) != ''
+ trim($sXml->edit_metadata->build_form_method->module) != '' &&
+ trim($sXml->edit_metadata->build_form_method->file) != '' &&
+ trim($sXml->edit_metadata->build_form_method->class_name) != '' &&
+ trim($sXml->edit_metadata->build_form_method->method_name) != '' &&
+ trim($sXml->edit_metadata->submit_form_method->method_name) != '' &&
+ trim($sXml->edit_metadata->build_form_method['dsid']) != ''
) {
$edit_metadata_methodEl = $newDom->createElement('edit_metadata_method');
$edit_metadata_methodEl->setAttribute('module', $sXml->edit_metadata->build_form_method->module);
@@ -491,6 +490,23 @@ class ContentModel extends XMLDatastream {
return $ret;
}
+ /**
+ * Gets the DSID of the default datastream
+ * from the element of the schema.
+ * Returns FALSE on failure.
+ *
+ * @return String
+ */
+
+ public function getDatastreamNameDSID() {
+ $datastreams = $this->xml->getElementsByTagName('datastreams');
+ $datastream = $datastreams->item(0);
+ if ($datastreams->length > 0) {
+ $datastream = $datastreams->item(0)->getElementsByTagName('datastream');
+ return $datastream->item(0)->getAttribute('dsid');
+ }
+ }
+
/**
* Gets an array of form elements to use in the ingest form. The results of this array are passed
* to the specified ingest form builder. The form builder can optionally not use the elements as defined
@@ -1677,9 +1693,9 @@ class ContentModel extends XMLDatastream {
$dispMethods = $ds->getElementsByTagName('display_method');
for ($i = 0; !$found && $i < $dispMethods->length; $i++) {
if ($module == ($dispMethods->item($i)->getAttribute('module') == '' ? 'fedora_repository' : $dispMethods->item($i)->getAttribute('module')) &&
- $file == $dispMethods->item($i)->getAttribute('file') &&
- $class == $dispMethods->item($i)->getAttribute('class') &&
- $method == $dispMethods->item($i)->getAttribute('method')) {
+ $file == $dispMethods->item($i)->getAttribute('file') &&
+ $class == $dispMethods->item($i)->getAttribute('class') &&
+ $method == $dispMethods->item($i)->getAttribute('method')) {
$found = $dispMethods->item($i);
}
}
@@ -1715,9 +1731,9 @@ class ContentModel extends XMLDatastream {
$dispMethods = $ds->getElementsByTagName('display_method');
for ($i = 0; !$found && $i < $dispMethods->length; $i++) {
if ($module == ($dispMethods->item($i)->getAttribute('module') == '' ? 'fedora_repository' : $dispMethods->item($i)->getAttribute('module') == '') &&
- $file == $dispMethods->item($i)->getAttribute('file') &&
- $class == $dispMethods->item($i)->getAttribute('class') &&
- $method == $dispMethods->item($i)->getAttribute('method')) {
+ $file == $dispMethods->item($i)->getAttribute('file') &&
+ $class == $dispMethods->item($i)->getAttribute('class') &&
+ $method == $dispMethods->item($i)->getAttribute('method')) {
$found = $dispMethods->item($i);
}
}
@@ -1919,9 +1935,9 @@ class ContentModel extends XMLDatastream {
$found = FALSE;
for ($i = 0; $found === FALSE && $i < $methods->length; $i++) {
if (($methods->item($i)->getAttribute('module') == '' ? 'fedora_repository' : $methods->item($i)->getAttribute('module')) == $module &&
- $methods->item($i)->getAttribute('file') == $file &&
- $methods->item($i)->getAttribute('class') == $class &&
- $methods->item($i)->getAttribute('method') == $method) {
+ $methods->item($i)->getAttribute('file') == $file &&
+ $methods->item($i)->getAttribute('class') == $class &&
+ $methods->item($i)->getAttribute('method') == $method) {
$found = $methods->item($i);
}
}
diff --git a/ObjectHelper.inc b/ObjectHelper.inc
index e6e0bb69..9e9995b7 100644
--- a/ObjectHelper.inc
+++ b/ObjectHelper.inc
@@ -21,6 +21,7 @@ class ObjectHelper {
public static $VIEW_DETAILED_CONTENT_LIST = 'view detailed list of content';
public static $MANAGE_COLLECTIONS = 'manage collections';
public static $DELETE_ENTIRE_COLLECTIONS = 'delete entire collections';
+ public static $CREATE_BATCH_PROCESS = 'create batch process';
public static $DISPLAY_ALWAYS = 0;
public static $DISPLAY_NEVER = 1;
public static $DISPLAY_NO_MODEL_OUTPUT = 2;
diff --git a/api/fedora_item.inc b/api/fedora_item.inc
index 4c78ce97..4dacca8c 100644
--- a/api/fedora_item.inc
+++ b/api/fedora_item.inc
@@ -562,7 +562,6 @@ class Fedora_Item {
$relsextxml->loadXML($relsext);
$relsextxml->normalizeDocument();
$rels = $relsextxml->getElementsByTagNameNS('info:fedora/fedora-system:def/relations-external#', '*');
-
foreach ($rels as $child) {
if (empty($relationship) || preg_match("/$relationship/", $child->tagName)) {
$relationships[] = array(
@@ -572,12 +571,36 @@ class Fedora_Item {
);
}
}
+
+ return $relationships;
+ }
+
+
+ function get_models() {
+ $relationships = array();
+ try {
+ $relsext = $this->get_datastream_dissemination('RELS-EXT');
+ } catch (exception $e) {
+ drupal_set_message(t("Error retrieving RELS-EXT of object $pid"), 'error');
+ return $relationships;
+ }
+
+ // Parse the RELS-EXT into an associative array.
+ $relsextxml = new DOMDocument();
+ $relsextxml->loadXML($relsext);
+ $relsextxml->normalizeDocument();
+ $mods = $relsextxml->getElementsByTagNameNS(FEDORA_MODEL_URI, '*');
+ foreach ($mods as $child) {
+ if (empty($relationship) || preg_match("/$relationship/", $child->tagName)) {
+ $relationships[] = array(
+ 'subject' => $this->pid,
+ 'predicate' => $child->tagName,
+ 'object' => substr($child->getAttributeNS('http://www.w3.org/1999/02/22-rdf-syntax-ns#', 'resource'), 12),
+ );
+ }
+ }
+
return $relationships;
- //$children = $relsextxml->RDF->description;
- //$children = $relsextxml->RDF->description;
- //$params = array( 'pid' => $this->pid,
- // 'relationship' => 'NULL' );
- //return $this->soap_call( 'getRelationships', $params );
}
/**
diff --git a/fedora_repository.module b/fedora_repository.module
index 06c2d6d4..ea1c15c5 100644
--- a/fedora_repository.module
+++ b/fedora_repository.module
@@ -832,6 +832,7 @@ function fedora_repository_perm() {
OBJECTHELPER::$VIEW_DETAILED_CONTENT_LIST,
OBJECTHELPER::$MANAGE_COLLECTIONS,
OBJECTHELPER::$DELETE_ENTIRE_COLLECTIONS,
+ OBJECTHELPER::$CREATE_BATCH_PROCESS,
);
}
@@ -989,7 +990,17 @@ function fedora_repository_get_items($pid = NULL, $dsId = NULL, $collection = NU
// Add a 'manage object' tab for all objects, where detailed list of content is shown.
$obj = new FedoraObjectDetailedContent($pid);
$object_details = $obj->showFieldSets();
+ if ($object_details['fedora_object_details']['#selected'] == true){
+ foreach($cmodels_tabs as $cmodel_tab){
+ if (is_array($cmodel_tab)){
+ $cmodel_tab['#selected'] = FALSE;
+ }
+
+ }
+ }
$cmodels_tabs = array_merge($cmodels_tabs, $object_details);
+
+
return tabs_render($cmodels_tabs);
}
diff --git a/xsl/mods_to_dc.xsl b/xsl/mods_to_dc.xsl
new file mode 100644
index 00000000..4c007469
--- /dev/null
+++ b/xsl/mods_to_dc.xsl
@@ -0,0 +1,436 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ :
+
+
+
+
+ .
+
+
+
+ .
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ --
+
+
+
+
+ --
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ --
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+ --
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Collection
+
+
+ DataSet
+
+
+ Service
+
+
+
+ Software
+
+
+ Image
+
+
+
+ InteractiveResource
+
+
+ MovingImage
+
+
+ PhysicalObject
+
+
+
+ Sound
+
+
+ StillImage
+
+
+
+ Text
+
+
+ Text
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ :
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ --
+
+
+
+
+
+
+
+
+
+
+
+
+ --
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ,
+
+
+
+
+ ,
+
+
+
+
+ (
+
+
+ )
+
+
+ (
+
+ )
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
+
+
+