Browse Source

ISLANDORA-227 MODS fixes - still in progress

pull/105/head
Alexander O'Neill 14 years ago
parent
commit
8731684b77
  1. 43
      ilives/book.inc

43
ilives/book.inc

@ -58,8 +58,12 @@ class IslandoraBook {
'#type' => 'textarea', '#type' => 'textarea',
'#title' => 'MODS Record to Import', '#title' => 'MODS Record to Import',
'#rows' => 20, '#rows' => 20,
'#value' => (!empty($mods_save) ? $mods_save['mods']['mods_record'] : ''),
); );
if (!empty($mods_save)) {
$form['mods']['mods_record']['#value'] = $mods_save['mods']['mods_record'];
}
return $form; return $form;
} }
@ -101,7 +105,7 @@ class IslandoraBook {
return TRUE; return TRUE;
} }
public function handleIngestForm($form_values) { public function handleIngestForm($form_values, &$form_state) {
/* /*
* process the metadata form * process the metadata form
* Create fedora object * Create fedora object
@ -113,33 +117,38 @@ class IslandoraBook {
return; return;
} }
$mods_simple = simplexml_load_string($form_values['mods']['mods_record']); $mods_simple = simplexml_load_string($form_values['mods']['mods_record']);
$title = ''; $title = '';
foreach ($mods_simple->children('http://www.loc.gov/mods/v3')->mods[0]->titleInfo[0]->children() as $child) {
if ($child->getName() == 'subTitle') { $mods_simple->registerXPathNamespace('mods', 'http://www.loc.gov/mods/v3');
// We don't care about subtitles for creating the item label. $mods_records = $mods_simple->xpath('//mods:mods');
continue; $mods_record = $mods_records[0];
} $titles = $mods_simple->xpath('//mods:title');
$title .= $child; $title = (string) $titles[0];
} $mods_dom = dom_import_simplexml($mods_record);
$mods_dom->name = 'mods';
$mods_text = $mods_dom->ownerDocument->saveXML();
$mods_doc = new DOMDocument();
$new_node = $mods_doc->importNode($mods_dom, TRUE);
$mods_doc->documentElement->appendChild($new_node);
$mods_text = $mods_doc->saveXML();
global $user; global $user;
$mimetype = new MimeClass(); $mimetype = new MimeClass();
$new_item = Fedora_Item::ingest_new_item(!empty($form_values['custom_pid']) ? $form_values['custom_pid'] : $form_values['pid'], 'A', $title, $new_item = Fedora_Item::ingest_new_item(!empty($form_values['custom_pid']) ? $form_values['custom_pid'] : $form_values['pid'], 'A', $title,
$user->name); $user->name);
$new_item->add_datastream_from_string($form_values['mods']['mods_record'], 'MODS', $new_item->add_datastream_from_string($mods_text, 'MODS',
'MODS Metadata', 'text/xml', 'X'); 'MODS Metadata', 'text/xml', 'X');
$dc = transform_mods_to_dc($form_values['mods']['mods_record']); $dc = transform_mods_to_dc($mods_text);
if ($dc) { if ($dc) {
// Add the PID to a dc:identifier field. // Add the PID to a dc:identifier field.
$dc_doc = simplexml_load_string($dc); $dc_doc = simplexml_load_string($dc);
$dc_item = $dc_doc->xpath('/srw_dc:dcCollection/srw_dc:dc[1]'); $dc_doc->registerXPathNamespace('oai_dc', 'http://www.openarchives.org/OAI/2.0/oai_dc/');
$dc_item = $dc_doc->xpath('//oai_dc:dc');
foreach($dc_item as $node) { foreach($dc_item as $node) {
$node->addChild('identifier', $new_item->pid, 'http://purl.org/dc/elements/1.1/'); $node->addChild('dc:identifier', $new_item->pid, 'http://purl.org/dc/elements/1.1/');
} }
$new_item->modify_datastream_by_value($dc_doc->saveXML(), 'DC', 'Dublin Core XML Metadata', 'text/xml'); $new_item->modify_datastream_by_value($dc_doc->saveXML(), 'DC', 'Dublin Core XML Metadata', 'text/xml');
} }
@ -291,4 +300,4 @@ function transform_mods_to_dc($mods) {
else { else {
return FALSE; return FALSE;
} }
} }

Loading…
Cancel
Save