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.
304 lines
12 KiB
304 lines
12 KiB
<?php |
|
|
|
// $Id$ |
|
|
|
/** |
|
* @file |
|
* Form Builder class |
|
*/ |
|
|
|
/** |
|
* implements method from content model ingest form xml |
|
*/ |
|
class FormBuilder { |
|
|
|
/** |
|
* Constructor |
|
*/ |
|
function FormBuilder() { |
|
module_load_include('inc', 'Flv', ''); |
|
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL); |
|
} |
|
|
|
/** |
|
* Create QDC Stream ??? |
|
* @param type $form_values |
|
* @param type $dom |
|
* @param type $rootElement |
|
*/ |
|
function createQDCStream($form_values, &$dom, &$rootElement) { |
|
$datastream = $dom->createElement("foxml:datastream"); |
|
$datastream->setAttribute("ID", "QDC"); |
|
$datastream->setAttribute("STATE", "A"); |
|
$datastream->setAttribute("CONTROL_GROUP", "X"); |
|
$version = $dom->createElement("foxml:datastreamVersion"); |
|
$version->setAttribute("ID", "QDC.0"); |
|
$version->setAttribute("MIMETYPE", "text/xml"); |
|
$version->setAttribute("LABEL", "QDC Dublin Core Record"); |
|
$datastream->appendChild($version); |
|
$content = $dom->createElement("foxml:xmlContent"); |
|
$version->appendChild($content); |
|
///begin writing qdc |
|
$oai = $dom->createElement("oai_dc:dc"); |
|
$oai->setAttribute('xmlns:oai_dc', "http://www.openarchives.org/OAI/2.0/oai_dc/"); |
|
$oai->setAttribute('xmlns:dc', "http://purl.org/dc/elements/1.1/"); |
|
$oai->setAttribute('xmlns:dcterms', "http://purl.org/dc/terms/"); |
|
$oai->setAttribute('xmlns:xsi', "http://www.w3.org/2001/XMLSchema-instance"); |
|
$content->appendChild($oai); |
|
//dc elements |
|
$previousElement = NULL; //used in case we have to nest elements for qualified dublin core |
|
foreach ($form_values as $key => $value) { |
|
$index = strrpos($key, '-'); |
|
if ($index > 01) { |
|
$key = substr($key, 0, $index); |
|
} |
|
|
|
$test = substr($key, 0, 2); |
|
|
|
if ($test == 'dc' || $test == 'ap') {//don't try to process other form values |
|
try { |
|
if (!strcmp(substr($key, 0, 4), 'app_')) { |
|
$key = substr($key, 4); |
|
$previousElement->appendChild($dom->createElement($key, $value)); |
|
} |
|
else { |
|
$previousElement = $dom->createElement($key, $value); |
|
$oai->appendChild($previousElement); |
|
} |
|
} catch (exception $e) { |
|
drupal_set_message(t("!e", array('!e' => $e->getMessage())), 'error'); |
|
continue; |
|
} |
|
} |
|
$rootElement->appendChild($datastream); |
|
} |
|
} |
|
|
|
/** |
|
* Handle QDC Form ??? |
|
* @param type $form_values |
|
* @return type |
|
*/ |
|
function handleQDCForm($form_values) { |
|
$dom = new DomDocument("1.0", "UTF-8"); |
|
$dom->formatOutput = TRUE; |
|
$pid = $form_values['pid']; |
|
$rootElement = $dom->createElement("foxml:digitalObject"); |
|
$rootElement->setAttribute('PID', "$pid"); |
|
$rootElement->setAttribute('xmlns:foxml', "info:fedora/fedora-system:def/foxml#"); |
|
$rootElement->setAttribute('xmlns:xsi', "http://www.w3.org/2001/XMLSchema-instance"); |
|
$rootElement->setAttribute('xsi:schemaLocation', "info:fedora/fedora-system:def/foxml# http://www.fedora.info/definitions/1/0/foxml1-0.xsd"); |
|
$dom->appendChild($rootElement); |
|
//create standard fedora stuff |
|
$this->createStandardFedoraStuff($form_values, $dom, $rootElement); |
|
//create relationships |
|
$this->createRelationShips($form_values, $dom, $rootElement); |
|
//create dublin core |
|
$this->createQDCStream($form_values, $dom, $rootElement); |
|
$this->createFedoraDataStreams($form_values, $dom, $rootElement); |
|
$params = array( |
|
'objectXML' => $dom->saveXML(), |
|
'format' => "foxml1.0", |
|
'logMessage' => "Fedora Object Ingested", |
|
); |
|
|
|
try { |
|
$soapHelper = new ConnectionHelper(); |
|
$client = $soapHelper->getSoapClient(variable_get('fedora_soap_manage_url', 'http://localhost:8080/fedora/services/management?wsdl')); |
|
|
|
if ($client == NULL) { |
|
drupal_set_message(t('Error getting SOAP client.'), 'error'); |
|
return; |
|
} |
|
$object = $client->__soapCall('ingest', array($params)); |
|
$deleteFiles = $form_values['delete_file']; //remove files from drupal file system |
|
|
|
if ($deleteFiles > 0) { |
|
foreach ($_SESSION['fedora_ingest_files'] as $dsid => $createdFile) { |
|
unlink($createdFile); |
|
} |
|
unlink($form_values['fullpath']); |
|
} |
|
} catch (exception $e) { |
|
drupal_set_message(t('Error ingesting object: !e', array('!e' => $e->getMessage())), 'error'); |
|
return; |
|
} |
|
} |
|
|
|
/** |
|
* Create Fedora DataStream |
|
* @param type $form_values |
|
* @param type $dom |
|
* @param type $rootElement |
|
*/ |
|
function createFedoraDataStreams($form_values, &$dom, &$rootElement) { |
|
module_load_include('inc', 'fedora_repository', 'MimeClass'); |
|
$mimetype = new MimeClass(); |
|
$server = NULL; |
|
$file = $form_values['ingest-file-location']; |
|
$dformat = $mimetype->getType($file); |
|
$fileUrl = 'http://' . $_SERVER['HTTP_HOST'] . $file; |
|
$beginIndex = strrpos($fileUrl, '/'); |
|
$dtitle = substr($fileUrl, $beginIndex + 1); |
|
$dtitle = substr($dtitle, 0, strpos($dtitle, ".")); |
|
$ds1 = $dom->createElement("foxml:datastream"); |
|
$ds1->setAttribute("ID", "OBJ"); |
|
$ds1->setAttribute("STATE", "A"); |
|
$ds1->setAttribute("CONTROL_GROUP", "M"); |
|
$ds1v = $dom->createElement("foxml:datastreamVersion"); |
|
$ds1v->setAttribute("ID", "OBJ.0"); |
|
$ds1v->setAttribute("MIMETYPE", "$dformat"); |
|
$ds1v->setAttribute("LABEL", "$dtitle"); |
|
$ds1content = $dom->createElement('foxml:contentLocation'); |
|
$ds1content->setAttribute("REF", "$fileUrl"); |
|
$ds1content->setAttribute("TYPE", "URL"); |
|
$ds1->appendChild($ds1v); |
|
$ds1v->appendChild($ds1content); |
|
$rootElement->appendChild($ds1); |
|
|
|
foreach ($_SESSION['fedora_ingest_files'] as $dsid => $createdFile) { |
|
$createdFile = strstr($createdFile, $file); |
|
$dformat = $mimetype->getType($createdFile); |
|
$fileUrl = 'http://' . $_SERVER['HTTP_HOST'] . $createdFile; |
|
$beginIndex = strrpos($fileUrl, '/'); |
|
$dtitle = substr($fileUrl, $beginIndex + 1); |
|
$dtitle = substr($dtitle, 0, strpos($dtitle, ".")); |
|
$dtitle = $dtitle . '_' . $dsid; |
|
$ds1 = $dom->createElement("foxml:datastream"); |
|
$ds1->setAttribute("ID", "$dsid"); |
|
$ds1->setAttribute("STATE", "A"); |
|
$ds1->setAttribute("CONTROL_GROUP", "M"); |
|
$ds1v = $dom->createElement("foxml:datastreamVersion"); |
|
$ds1v->setAttribute("ID", "$dsid.0"); |
|
$ds1v->setAttribute("MIMETYPE", "$dformat"); |
|
$ds1v->setAttribute("LABEL", "$dtitle"); |
|
$ds1content = $dom->createElement('foxml:contentLocation'); |
|
$ds1content->setAttribute("REF", "$fileUrl"); |
|
$ds1content->setAttribute("TYPE", "URL"); |
|
$ds1->appendChild($ds1v); |
|
$ds1v->appendChild($ds1content); |
|
$rootElement->appendChild($ds1); |
|
} |
|
} |
|
|
|
/** |
|
* creates the RELS-EXT for the foxml |
|
* @param type $form_values |
|
* @param type $dom |
|
* @param type $rootElement |
|
*/ |
|
function createRelationShips($form_values, &$dom, &$rootElement) { |
|
$drdf = $dom->createElement("foxml:datastream"); |
|
$drdf->setAttribute("ID", "RELS-EXT"); |
|
$drdf->setAttribute("CONTROL_GROUP", "X"); |
|
$dvrdf = $dom->createElement("foxml:datastreamVersion"); |
|
$dvrdf->setAttribute("ID", "RELS-EXT.0"); |
|
$dvrdf->setAttribute("MIMETYPE", "text/xml"); |
|
$dvrdf->setAttribute("LABEL", "Fedora Object-to-Object Relationship Metadata"); |
|
$dvcontent = $dom->createElement("foxml:xmlContent"); |
|
$rdf = $dom->createElement("rdf:RDF"); |
|
$rdf->setAttribute("xmlns:rdf", "http://www.w3.org/1999/02/22-rdf-syntax-ns#"); |
|
$rdf->setAttribute("xmlns:rdfs", "http://www.w3.org/2000/01/rdf-schema#"); |
|
$rdf->setAttribute("xmlns:fedora", "info:fedora/fedora-system:def/relations-external#"); |
|
$rdf->setAttribute("xmlns:dc", "http://purl.org/dc/elements/1.1/"); |
|
$rdf->setAttribute("xmlns:oai_dc", "http://www.openarchives.org/OAI/2.0/oai_dc/"); |
|
$rdfdesc = $dom->createElement("rdf:description"); |
|
$pid = $form_values['pid']; |
|
$rdfdesc->setAttribute("rdf:about", "info:fedora/$pid"); |
|
$member = $dom->createElement("fedora:isMemberOfCollection"); |
|
$membr = $form_values['collection_pid']; |
|
$member->setAttribute("rdf:resource", "info:fedora/$membr"); |
|
|
|
$drdf->appendChild($dvrdf); |
|
$dvrdf->appendChild($dvcontent); |
|
$dvcontent->appendChild($rdf); |
|
$rdf->appendChild($rdfdesc); |
|
$rdfdesc->appendChild($member); |
|
$rootElement->appendChild($drdf); |
|
} |
|
|
|
/** |
|
* creates the standard foxml properties |
|
* @param type $form_values |
|
* @param type $dom |
|
* @param type $rootElement |
|
*/ |
|
function createStandardFedoraStuff($form_values, &$dom, &$rootElement) { |
|
/* foxml object properties section */ |
|
$objproperties = $dom->createElement("foxml:objectProperties"); |
|
$prop1 = $dom->createElement("foxml:property"); |
|
$prop1->setAttribute("NAME", "http://www.w3.org/1999/02/22-rdf-syntax-ns#type"); |
|
$prop1->setAttribute("VALUE", "FedoraObject"); |
|
$prop2 = $dom->createElement("foxml:property"); |
|
$prop2->setAttribute("NAME", "info:fedora/fedora-system:def/model#state"); |
|
$prop2->setAttribute("VALUE", "A"); |
|
$prop3 = $dom->createElement("foxml:property"); |
|
$prop3->setAttribute("NAME", "info:fedora/fedora-system:def/model#label"); |
|
$prop3->setAttribute("VALUE", $form_values['dc:title']); |
|
$prop4 = $dom->createElement("foxml:property"); |
|
$prop4->setAttribute("NAME", "info:fedora/fedora-system:def/model#contentModel"); |
|
$prop4->setAttribute("VALUE", $form_values['content_model_name']); |
|
$prop5 = $dom->createElement("foxml:property"); |
|
$prop5->setAttribute("NAME", "info:fedora/fedora-system:def/model#ownerId"); |
|
$prop5->setAttribute("VALUE", $form_values['user_id']); |
|
$objproperties->appendChild($prop1); |
|
$objproperties->appendChild($prop2); |
|
$objproperties->appendChild($prop3); |
|
$objproperties->appendChild($prop4); |
|
$objproperties->appendChild($prop5); |
|
$rootElement->appendChild($objproperties); |
|
} |
|
|
|
/** |
|
* Build QDC Form |
|
* @param type $form |
|
* @param type $ingest_form_definition |
|
* @param type $form_values |
|
* @return type |
|
*/ |
|
function buildQDCForm(&$form, $ingest_form_definition, &$form_values) { |
|
$form['indicator2'] = array( |
|
'#type' => 'fieldset', |
|
'#title' => t('Ingest Digital Object Step #2') |
|
); |
|
foreach ($ingest_form_definition->form_elements->element as $element) { |
|
$name = strip_tags($element->name->asXML()); |
|
$title = strip_tags($element->label->asXML()); |
|
$required = strip_tags($element->required->asXML()); |
|
$required = strtolower($required); |
|
if ($required != 'TRUE') { |
|
$required = '0'; |
|
} |
|
|
|
$description = strip_tags($element->description->asXML()); |
|
$type = strip_tags($element->type->asXML()); |
|
$options = array(); |
|
if ($element->type == 'select') { |
|
foreach ($element->authoritative_list->item as $item) { |
|
$field = strip_tags($item->field->asXML()); |
|
$value = strip_tags($item->value->asXML()); |
|
$options["$field"] = $value; |
|
} |
|
$form['indicator2']["$name"] = array( |
|
'#title' => $title, |
|
'#required' => $required, |
|
'#description' => $description, |
|
'#type' => $type, |
|
'#options' => $options, |
|
); |
|
} |
|
else { |
|
$form['indicator2']["$name"] = array( |
|
'#title' => $title, |
|
'#required' => $required, |
|
'#description' => $description, |
|
'#type' => $type |
|
); |
|
} |
|
} |
|
|
|
return $form; |
|
} |
|
|
|
} |
|
|
|
|