Drupal modules for browsing and managing Fedora-based digital repositories.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

346 lines
13 KiB

<?php
/* @file
*/
/**
* @file
* Darwin Core class
*/
/**
* Darwin Core ???
*/
class DarwinCore {
/**
* Constructor
* @param type $item
*/
function __construct($item = NULL) {
module_load_include('inc', 'islandora_repository', 'api/fedora_item');
if (!empty($item)) {
$this->owner = $item;
if (array_key_exists('DARWIN_CORE', $item->get_datastreams_list_as_array())) {
$dwc = $item->get_datastream_dissemination('DARWIN_CORE');
if (!empty($dwc)) {
$this->darwinCoreXML = $dwc;
}
}
}
}
/**
* Build Drupal Form
* @param type $form
* @return int
*/
public function buildDrupalForm($form = array()) {
$dwc_xml = $this->darwinCoreXML;
$dwc = DOMDocument::loadXML($dwc_xml);
$form['dc:type'] = array(
'#title' => 'dc:type',
'#type' => 'textfield',
'#default_value' => $dwc->getElementsByTagNameNS('http://purl.org/dc/terms/', 'type')->item(0)->nodeValue,
'#description' => '',
);
$form['dc:language'] = array(
'#title' => 'dc:language',
'#type' => 'textfield',
'#default_value' => $dwc->getElementsByTagNameNS('http://purl.org/dc/terms/', 'language')->item(0)->nodeValue,
'#description' => '',
);
$form['dwc:basisOfRecord'] = array(
'#title' => 'Basis of Record',
'#type' => 'select',
'#default_value' => $dwc->getElementsByTagNameNS('http://rs.tdwg.org/dwc/terms/', 'basisOfRecord')->item(0)->nodeValue,
'#options' => $this->vocabulary['basisOfRecord'],
'#description' => '',
);
$form['dwc:scientificName'] = array(
'#title' => 'dwc:scientificName',
'#type' => 'textfield',
'#default_value' => $dwc->getElementsByTagNameNS('http://rs.tdwg.org/dwc/terms/', 'scientificName')->item(0)->nodeValue,
'#description' => '',
);
$form['dwc:specificEpithet'] = array(
'#title' => 'dwc:specificEpithet',
'#type' => 'textfield',
'#default_value' => $dwc->getElementsByTagNameNS('http://rs.tdwg.org/dwc/terms/', 'specificEpithet')->item(0)->nodeValue,
'#description' => '',
);
$form['dwc:family'] = array(
'#title' => 'dwc:family',
'#type' => 'textfield',
'#default_value' => $dwc->getElementsByTagNameNS('http://rs.tdwg.org/dwc/terms/', 'family')->item(0)->nodeValue,
'#description' => '',
);
$form['dwc:genus'] = array(
'#title' => 'dwc:genus',
'#type' => 'textfield',
'#default_value' => $dwc->getElementsByTagNameNS('http://rs.tdwg.org/dwc/terms/', 'genus')->item(0)->nodeValue,
'#description' => '',
);
$form['dwc:vernacularName'] = array(
'#title' => 'dwc:vernacularName',
'#type' => 'textfield',
'#default_value' => $dwc->getElementsByTagNameNS('http://rs.tdwg.org/dwc/terms/', 'vernacularName')->item(0)->nodeValue,
'#description' => '',
);
$form['dwc:continent'] = array(
'#title' => 'dwc:continent',
'#type' => 'textfield',
'#default_value' => $dwc->getElementsByTagNameNS('http://rs.tdwg.org/dwc/terms/', 'continent')->item(0)->nodeValue,
'#description' => '',
);
$form['dwc:country'] = array(
'#title' => 'dwc:country',
'#type' => 'textfield',
'#default_value' => $dwc->getElementsByTagNameNS('http://rs.tdwg.org/dwc/terms/', 'country')->item(0)->nodeValue,
'#description' => '',
);
$form['dwc:stateProvince'] = array(
'#title' => 'dwc:stateProvince',
'#type' => 'textfield',
'#default_value' => $dwc->getElementsByTagNameNS('http://rs.tdwg.org/dwc/terms/', 'stateProvince')->item(0)->nodeValue,
'#description' => '',
);
$form['dwc:county'] = array(
'#title' => 'dwc:county',
'#type' => 'textfield',
'#default_value' => $dwc->getElementsByTagNameNS('http://rs.tdwg.org/dwc/terms/', 'county')->item(0)->nodeValue,
'#description' => '',
);
$form['dwc:locality'] = array(
'#title' => 'dwc:locality',
'#type' => 'textfield',
'#default_value' => $dwc->getElementsByTagNameNS('http://rs.tdwg.org/dwc/terms/', 'locality')->item(0)->nodeValue,
'#description' => '',
);
$form['dwc:habitat'] = array(
'#title' => 'dwc:habitat',
'#type' => 'textfield',
'#default_value' => $dwc->getElementsByTagNameNS('http://rs.tdwg.org/dwc/terms/', 'habitat')->item(0)->nodeValue,
'#description' => '',
);
$form['dwc:occurrenceRemarks'] = array(
'#title' => 'dwc:occurrenceRemarks',
'#type' => 'textfield',
'#default_value' => $dwc->getElementsByTagNameNS('http://rs.tdwg.org/dwc/terms/', 'occurrenceRemarks')->item(0)->nodeValue,
'#description' => '',
);
$form['dwc:occurrenceID'] = array(
'#title' => 'dwc:occurrenceID',
'#type' => 'textfield',
'#default_value' => $dwc->getElementsByTagNameNS('http://rs.tdwg.org/dwc/terms/', 'occurrenceID')->item(0)->nodeValue,
'#description' => '',
);
$form['dwc:institutionCode'] = array(
'#title' => 'dwc:institutionCode',
'#type' => 'textfield',
'#default_value' => $dwc->getElementsByTagNameNS('http://rs.tdwg.org/dwc/terms/', 'institutionCode')->item(0)->nodeValue,
'#description' => '',
);
$form['dwc:collectionCode'] = array(
'#title' => 'dwc:collectionCode',
'#type' => 'textfield',
'#default_value' => $dwc->getElementsByTagNameNS('http://rs.tdwg.org/dwc/terms/', 'collectionCode')->item(0)->nodeValue,
'#description' => '',
);
$form['dwc:collectionCode'] = array(
'#title' => 'dwc:collectionCode',
'#type' => 'textfield',
'#default_value' => $dwc->getElementsByTagNameNS('http://rs.tdwg.org/dwc/terms/', 'collectionCode')->item(0)->nodeValue,
'#description' => '',
);
$form['dwc:catalogNumber'] = array(
'#title' => 'dwc:catalogNumber',
'#type' => 'textfield',
'#default_value' => $dwc->getElementsByTagNameNS('http://rs.tdwg.org/dwc/terms/', 'catalogNumber')->item(0)->nodeValue,
'#description' => '',
);
$form['dwc:catalogNumber'] = array(
'#title' => 'dwc:catalogNumber',
'#type' => 'textfield',
'#default_value' => $dwc->getElementsByTagNameNS('http://rs.tdwg.org/dwc/terms/', 'catalogNumber')->item(0)->nodeValue,
'#description' => '',
);
$form['dwc:recordedBy'] = array(
'#title' => 'dwc:recordedBy',
'#type' => 'textfield',
'#default_value' => $dwc->getElementsByTagNameNS('http://rs.tdwg.org/dwc/terms/', 'recordedBy')->item(0)->nodeValue,
'#description' => '',
);
$date = $dwc->getElementsByTagNameNS('http://rs.tdwg.org/dwc/terms/', 'eventDate')->item(0)->nodeValue;
$format = 'Y-m-d H:i:s';
$form['dwceventDate'] = array(
'#type' => 'date_popup', // types 'date_text' and 'date_timezone' are also supported. See .inc file.
'#title' => 'select a date',
'#default_value' => $date,
'#date_format' => $format,
'#date_label_position' => 'within', // See other available attributes and what they do in date_api_elements.inc
'#date_increment' => 15, // Optional, used by the date_select and date_popup elements to increment minutes and seconds.
'#description' => '',
);
return $form;
}
/**
* Handle Form ??
* @global type $user
* @param type $form_values
*/
public function handleForm($form_values) {
module_load_include('inc', 'islandora_repository', 'api/fedora_item');
global $user;
//$new_item = Fedora_Item::ingest_new_item($form_values['pid'], 'A', $form_values['dwc:institutionCode'].':'.$form_values['dwc:collectionCode'].':'.$form_values['dwc:catalogNumber'], $user->name);
//$new_item->add_datastream_from_string($this->darwinCoreXML, 'DARWIN_CORE', 'Darwin Core Metadata', 'text/xml', 'X');
// For each form element, find and replace that element's value in the XML stream.
$dwc = new SimpleXMLElement($this->darwinCoreXML);
$dc_elements = $dwc->SimpleDarwinRecord->children('http://purl.org/dc/terms/');
$dc_elements->type = $form_values['dc:type'];
$dc_elements->language = $form_values['dc:language'];
$dwc_elements = $dwc->SimpleDarwinRecord->children('http://rs.tdwg.org/dwc/terms/');
$dwc_elements->basisOfRecord = $form_values['dwc:basisOfRecord'];
$dwc_elements->scientificName = $form_values['dwc:scientificName'];
$dwc_elements->specificName = $form_values['dwc:specificName'];
$dwc_elements->specificName = $form_values['dwc:family'];
$dwc_elements->genus = $form_values['dwc:genus'];
$dwc_elements->vernacularName = $form_values['dwc:vernacularName'];
$dwc_elements->continent = $form_values['dwc:continent'];
$dwc_elements->country = $form_values['dwc:country'];
$dwc_elements->countryCode = $form_values['dwc:countryCode'];
$dwc_elements->stateProvince = $form_values['dwc:stateProvince'];
$dwc_elements->locality = $form_values['dwc:locality'];
$dwc_elements->habitat = $form_values['dwc:habitat'];
$dwc_elements->occurrenceRemarks = $form_values['dwc:occurrenceRemarks'];
$dwc_elements->occurrenceID = $form_values['dwc:occurrenceID'];
$dwc_elements->institutionCode = $form_values['dwc:institutionCode'];
$dwc_elements->collectionCode = $form_values['dwc:collectionCode'];
$dwc_elements->catalogNumber = $form_values['dwc:catalogNumber'];
$dwc_elements->recordedBy = $form_values['dwc:recordedBy'];
$dwc_elements->eventDate = $form_values['dwceventDate'];
$this->darwinCoreXML = $dwc->saveXML();
}
/**
* asXML ??
* @return type
*/
public function asXML() {
return $this->darwinCoreXML;
}
/**
* asHTML ??
* @return type
*/
public function asHTML() {
$path = drupal_get_path('module', 'Fedora_Repository');
module_load_include('inc', 'islandora_repository', 'ObjectHelper');
module_load_include('inc', 'islandora_repository', 'CollectionClass');
$xmlstr = $this->darwinCoreXML;
html_entity_decode($xmlstr);
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/specdwc.xsl');
$input = new DomDocument();
$input->loadXML(trim($xmlstr));
$xsl = $proc->importStylesheet($xsl);
$newdom = $proc->transformToDoc($input);
$content = $newdom->saveXML();
return $content;
}
public $vocabulary = array(
'basisOfRecord' => array(
'Occurrence' => 'Occurrence',
'Event' => 'Event',
'Location' => 'Location',
'Taxon' => 'Taxon',
'PreservedSpecimen' => 'PreservedSpecimen',
'FossilSpecimen' => 'FossilSpecimen',
'LivingSpecimen' => 'LivingSpecimen',
'HumanObservation' => 'HumanObservation',
'MachineObservation' => 'MachineObservation',
'NomenclaturalChecklist' => 'NomenclaturalChecklist',
),
);
public $dwcFields = array(
'dc:type',
'dc:language',
'dwc:basisofrecord',
'dwc:scientificName',
'dwc:specificName',
'dwc:family',
'dwc:genus',
'dwc:vernacularName',
'dwc:continent',
'dwc:country',
'dwc:countryCode',
'dwc:stateProvince',
'dwc:locality',
'dwc:habitat',
'dwc:occurrenceRemarks',
'dwc:occurrenceID',
'dwc:institutionCode',
'dwc:collectionCode',
'dwc:catalogNumber',
'dwc:recordedBy',
'dwc:eventDate',
'dwc:eventTime',
);
public $darwinCoreXML = '
<SimpleDarwinRecordSet xmlns="http://rs.tdwg.org/dwc/xsd/simpledarwincore/" xmlns:dc="http://purl.org/dc/terms/" xmlns:dwc="http://rs.tdwg.org/dwc/terms/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://rs.tdwg.org/dwc/xsd/simpledarwincore/ http://rs.tdwg.org/dwc/xsd/tdwg_dwc_simple.xsd">
<SimpleDarwinRecord>
<dc:type></dc:type>
<dc:language>en</dc:language>
<dwc:basisOfRecord></dwc:basisOfRecord>
<dwc:scientificName></dwc:scientificName>
<dwc:specificEpithet></dwc:specificEpithet>
<dwc:family></dwc:family>
<dwc:genus></dwc:genus>
<dwc:vernacularName></dwc:vernacularName>
<dwc:continent></dwc:continent>
<dwc:country></dwc:country>
<dwc:countryCode></dwc:countryCode>
<dwc:stateProvince></dwc:stateProvince>
<dwc:county></dwc:county>
<dwc:locality></dwc:locality>
<dwc:habitat></dwc:habitat>
<dwc:occurrenceRemarks></dwc:occurrenceRemarks>
<dwc:occurrenceID></dwc:occurrenceID>
<dwc:institutionCode></dwc:institutionCode>
<dwc:collectionCode></dwc:collectionCode>
<dwc:catalogNumber></dwc:catalogNumber>
<dwc:recordedBy></dwc:recordedBy>
<dwc:eventDate></dwc:eventDate>
<dwc:eventTime></dwc:eventTime>
</SimpleDarwinRecord>
</SimpleDarwinRecordSet>';
}