From 3d28455bb13bf44d92d790cfa7b583dd9d5551ae Mon Sep 17 00:00:00 2001 From: mroy Date: Fri, 3 Dec 2010 17:30:07 -0600 Subject: [PATCH] Fixed a couple bugs with alternative titles. Added alternative handling for originInfo dates. Updated the edit metadata form builder to combine multiple xpath results for list types. made some private variables protected so that they may be used by extended classes. --- plugins/ModsFormBuilder.inc | 69 +++++++++++++++++++++++++++++-------- 1 file changed, 54 insertions(+), 15 deletions(-) diff --git a/plugins/ModsFormBuilder.inc b/plugins/ModsFormBuilder.inc index 3c135d6e..47dab34c 100644 --- a/plugins/ModsFormBuilder.inc +++ b/plugins/ModsFormBuilder.inc @@ -5,9 +5,9 @@ module_load_include('inc', 'fedora_repository', 'plugins/FormBuilder'); class ModsFormBuilder extends FormBuilder { static $MODS_NS = 'http://www.loc.gov/mods/v3'; - private $cm; - private $item; - private $pid; + protected $cm; + protected $item; + protected $pid; function __construct($pid=null) { @@ -43,7 +43,7 @@ class ModsFormBuilder extends FormBuilder { '#type' => 'fieldset', '#title' => t('Edit metadata'), ); - + if ($this->cm !== FALSE && $this->item != NULL) { $form['pid'] = array('#type'=>'hidden','#value'=>$this->pid); @@ -85,9 +85,12 @@ class ModsFormBuilder extends FormBuilder { $includeEl=FALSE; break; + case '#edit_metadata_xpath': $nodeList = $xpath->evaluate($val); -// echo $val. ' '.$nodeList->length.' '. $nodeList. '
'; +// echo $val. ' '.$nodeList->length.' '; +// echo $nodeList->item(0)->nodeValue.' '; +// echo '
'; if (is_string($nodeList)) { @@ -101,7 +104,15 @@ class ModsFormBuilder extends FormBuilder { } } else if ($nodeList->length > 0) { - $el['#default_value'] = $nodeList->item(0)->nodeValue; + if ($el['#type'] == 'list') { + $values=array(); + for ($i=0;$i<$nodeList->length;$i++) { + $values[]=$nodeList->item($i)->nodeValue; + } + $el['#default_value']=join('; ',$values); + } else { + $el['#default_value'] = $nodeList->item(0)->nodeValue; + } } break; } @@ -389,19 +400,19 @@ class ModsFormBuilder extends FormBuilder { $titles=preg_split('/\s+\;\s+/',trim($form_values['mods_alternative_titles'])); foreach ($titles as $t) { $titleinfo = $dom->createElement('mods:titleInfo'); - $titleinfo->setAttribute('alternative') ; + $titleinfo->setAttribute('type','alternative') ; $title = $dom->createElement('mods:title',$t); - $titleInfo->appendChild($title); - $mods->appendChild($title); + $titleinfo->appendChild($title); + $mods->appendChild($titleinfo); } } if (isset($form_values['mods_alternative_title']) && trim($form_values['mods_alternative_title']) != '') { $titleinfo = $dom->createElement('mods:titleInfo'); - $titleinfo->setAttribute('alternative') ; + $titleinfo->setAttribute('type','alternative') ; $title = $dom->createElement('mods:title',trim($form_values['mods_alternative_title'])); - $titleInfo->appendChild($title); - $mods->appendChild($title); + $titleinfo->appendChild($title); + $mods->appendChild($titleinfo); } if (isset($form_values['mods_description']) && trim($form_values['mods_description']) != '') { @@ -462,7 +473,8 @@ class ModsFormBuilder extends FormBuilder { $originInfo->appendChild($edition); $addOriginInfo = TRUE; } - + + if (isset($form_values['mods_pubinfo_date']) && trim($form_values['mods_pubinfo_date']) != '' && isset($form_values['mods_pubinfo_dateType']) && trim($form_values['mods_pubinfo_dateType']) != '') { if (in_array($form_values['mods_pubinfo_dateType'], array('issued', 'created', 'copyright', 'captured'))) { @@ -475,18 +487,45 @@ class ModsFormBuilder extends FormBuilder { } $originInfo->appendChild($date); $addOriginInfo = TRUE; + } else { + if (isset($form_values['mods_createdDate'])) { + $date = $dom->createElement('mods:createdDate',htmlspecialchars(trim($form_values['mods_createdDate']))); + $originInfo->appendChild($date); + $addOriginInfo = TRUE; + } + + if (isset($form_values['mods_issuedDate'])) { + $date = $dom->createElement('mods:issuedDate',htmlspecialchars(trim($form_values['mods_issuedDate']))); + $originInfo->appendChild($date); + $addOriginInfo = TRUE; + } + + if (isset($form_values['mods_copyrightDate'])) { + $date = $dom->createElement('mods:copyrightDate',htmlspecialchars(trim($form_values['mods_copyrightDate']))); + $originInfo->appendChild($date); + $addOriginInfo = TRUE; + } + + if (isset($form_values['mods_capturedDate'])) { + $date = $dom->createElement('mods:capturedDate',htmlspecialchars(trim($form_values['mods_capturedDate']))); + $originInfo->appendChild($date); + $addOriginInfo = TRUE; + } + } if (isset($form_values['mods_pubinfo_journalFreq']) && trim($form_values['mods_pubinfo_journalFreq']) != '') { $frequency = $dom->createElement('mods:frequency', htmlspecialchars(trim($form_values['mods_pubinfo_journalFreq']))); $originInfo->appendChild($frequency); $issuance= $dom->createElement('mods:issuance', 'journal'); + $originInfo->appendChild($issuance); $addOriginInfo = TRUE; } - else { + elseif (isset($form_values['mods_pubinfo_journalFreq'])) { $issuance= $dom->createElement('mods:issuance', 'monographic'); + $originInfo->appendChild($issuance); } - $originInfo->appendChild($issuance); + if ($addOriginInfo) { $mods->appendChild($originInfo);