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.
210 lines
9.0 KiB
210 lines
9.0 KiB
<?php |
|
// $Id$ |
|
|
|
/** |
|
* @package Islandora |
|
* @subpackage plugins |
|
*/ |
|
|
|
|
|
class PersonalCollectionClass { |
|
function PersonalCollectionClass() { |
|
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL); |
|
} |
|
|
|
function createCollection($theUser, $pid, $soapClient) { |
|
$dom = new DomDocument("1.0", "UTF-8"); |
|
$dom->formatOutput = TRUE; |
|
|
|
$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($theUser, $dom, $rootElement); |
|
//create dublin core |
|
$this->createDCStream($theUser, $dom, $rootElement); |
|
$value = $this->createPolicyStream($theUser, $dom, $rootElement); |
|
|
|
if (!$value) { |
|
return FALSE;//error should already be logged. |
|
} |
|
$this->createCollectionPolicyStream($theUser, $dom, $rootElement); |
|
try { |
|
$params = array( |
|
'objectXML' => $dom->saveXML(), |
|
'format' => "foxml1.0", |
|
'logMessage' => "Fedora object ingested", |
|
); |
|
|
|
$object = $soapClient->__soapCall('ingest', array( |
|
$params |
|
)); |
|
|
|
} |
|
catch (exception $e) { |
|
drupal_set_message(t('Error ingesting personal collection object: !e', array('!e' => $e->getMessage())), 'error'); |
|
return FALSE; |
|
} |
|
return TRUE; |
|
} |
|
|
|
function createCollectionPolicyStream($user, $dom, $rootElement) { |
|
$collectionTemplate = file_get_contents(drupal_get_path('module', 'Fedora_Repository') . '/collection_policies/PERSONAL-COLLECTION-POLICY.xml'); |
|
try { |
|
$xml = new SimpleXMLElement($collectionTemplate); |
|
} |
|
catch (Exception $e) { |
|
watchdog(t("Fedora_Repository"), t("Problem creating personal collection policy, could not parse collection policy stream."), NULL, WATCHDOG_ERROR); |
|
drupal_set_message(t('Problem creating personal collection policy, could not parse collection policy stream: !e', array('!e' => $e->getMessage())), 'error'); |
|
return FALSE; |
|
} |
|
$policyElement = $dom->createDocumentFragment(); |
|
|
|
if (!$policyElement) { |
|
drupal_set_message(t('Error parsing policy stream.')); |
|
watchdog(t("Fedora_Repository"), t("Error parsing policy stream, could not parse policy stream."), NULL, WATCHDOG_NOTICE); |
|
return FALSE; |
|
} |
|
$dom->importNode($policyElement, TRUE); |
|
|
|
$value = $policyElement->appendXML($collectionTemplate); |
|
if (!$value) { |
|
drupal_set_message(t('Error creating collection policy stream.')); |
|
watchdog(t("Fedora_Repository"), t("Error creating collection policy stream, could not parse collection policy template file."), NULL, WATCHDOG_NOTICE); |
|
return FALSE; |
|
} |
|
|
|
$ds1 = $dom->createElement("foxml:datastream"); |
|
$rootElement->appendChild($ds1); |
|
$ds1->setAttribute("ID", "COLLECTION_POLICY"); |
|
$ds1->setAttribute("STATE", "A"); |
|
$ds1->setAttribute("CONTROL_GROUP", "X"); |
|
$ds1v = $dom->createElement("foxml:datastreamVersion"); |
|
$ds1->appendChild($ds1v); |
|
$ds1v->setAttribute("ID", "COLLECTION_POLICY.0"); |
|
$ds1v->setAttribute("MIMETYPE", "text/xml"); |
|
$ds1v->setAttribute("LABEL", "COLLECTION_POLICY"); |
|
//$ds1v->setAttribute("FORMAT_URI","info:fedora/fedora-system:format/xml.fedora.audit"); |
|
$content = $dom->createElement("foxml:xmlContent"); |
|
$ds1v->appendChild($content); |
|
$content->appendChild($policyElement); |
|
return TRUE; |
|
} |
|
|
|
function createPolicyStream($user, $dom, $rootElement) { |
|
module_load_include('inc', 'fedora_repository', 'SecurityClass'); |
|
|
|
$securityClass = new SecurityClass(); |
|
$policyStreamDoc = $securityClass->createPersonalPolicy($user); |
|
$policyNodes = $policyStreamDoc->getElementsByTagName('Policy'); |
|
$policyStream = $policyNodes->item(0); |
|
$policyStream = $dom->importNode($policyStream, TRUE); |
|
|
|
$ds1 = $dom->createElement("foxml:datastream"); |
|
$rootElement->appendChild($ds1); |
|
$ds1->setAttribute("ID", "POLICY"); |
|
$ds1->setAttribute("STATE", "A"); |
|
$ds1->setAttribute("CONTROL_GROUP", "X"); |
|
$ds1v = $dom->createElement("foxml:datastreamVersion"); |
|
$ds1->appendChild($ds1v); |
|
$ds1v->setAttribute("ID", "POLICY.0"); |
|
$ds1v->setAttribute("MIMETYPE", "text/xml"); |
|
$ds1v->setAttribute("LABEL", "SECURITY_POLICY"); |
|
//$ds1v->setAttribute("FORMAT_URI","info:fedora/fedora-system:format/xml.fedora.audit"); |
|
$content = $dom->createElement("foxml:xmlContent"); |
|
$ds1v->appendChild($content); |
|
$content->appendChild($policyStream); |
|
return $this->createChildPolicyStream($dom, $rootElement, $policyStream->cloneNode(TRUE)); |
|
} |
|
|
|
//right now this is the same as the policy stream for this object, may change |
|
//objects in this collection will reference this datastream as their own POLICY stream |
|
function createChildPolicyStream($dom, $rootElement, $policyStream) { |
|
$ds1 = $dom->createElement("foxml:datastream"); |
|
|
|
$rootElement->appendChild($ds1); |
|
$ds1->setAttribute("ID", "CHILD_SECURITY"); |
|
$ds1->setAttribute("STATE", "A"); |
|
$ds1->setAttribute("CONTROL_GROUP", "X"); |
|
$ds1v = $dom->createElement("foxml:datastreamVersion"); |
|
$ds1->appendChild($ds1v); |
|
$ds1v->setAttribute("ID", "CHILD_SECURITY.0"); |
|
$ds1v->setAttribute("MIMETYPE", "text/xml"); |
|
$ds1v->setAttribute("LABEL", "SECURITY_POLICY"); |
|
//$ds1v->setAttribute("FORMAT_URI","info:fedora/fedora-system:format/xml.fedora.audit"); |
|
$content = $dom->createElement("foxml:xmlContent"); |
|
$ds1v->appendChild($content); |
|
$content->appendChild($policyStream); |
|
return TRUE; |
|
} |
|
|
|
function createStandardFedoraStuff($user, & $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", $user->name); |
|
$prop4 = $dom->createElement("foxml:property"); |
|
$prop4->setAttribute("NAME", "info:fedora/fedora-system:def/model#contentModel"); |
|
$prop4->setAttribute("VALUE", 'Collection'); |
|
$prop5 = $dom->createElement("foxml:property"); |
|
$prop5->setAttribute("NAME", "info:fedora/fedora-system:def/model#ownerId"); |
|
$prop5->setAttribute("VALUE", $user->name); |
|
$objproperties->appendChild($prop1); |
|
$objproperties->appendChild($prop2); |
|
$objproperties->appendChild($prop3); |
|
$objproperties->appendChild($prop4); |
|
$objproperties->appendChild($prop5); |
|
$rootElement->appendChild($objproperties); |
|
} |
|
|
|
function createDCStream($theUser, & $dom, & $rootElement) { |
|
global $user; |
|
$datastream = $dom->createElement("foxml:datastream"); |
|
$datastream->setAttribute("ID", "DC"); |
|
$datastream->setAttribute("STATE", "A"); |
|
$datastream->setAttribute("CONTROL_GROUP", "X"); |
|
$version = $dom->createElement("foxml:datastreamVersion"); |
|
$version->setAttribute("ID", "DC.0"); |
|
$version->setAttribute("MIMETYPE", "text/xml"); |
|
$version->setAttribute("LABEL", "Dublin Core Record"); |
|
$datastream->appendChild($version); |
|
$content = $dom->createElement("foxml:xmlContent"); |
|
$version->appendChild($content); |
|
///begin writing dc |
|
$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 |
|
$element = $dom->createElement('dc:type', 'Collection'); |
|
$oai->appendChild($element); |
|
$element = $dom->createElement('dc:title', $theUser->name . ' Personal Collection'); |
|
$oai->appendChild($element); |
|
$element = $dom->createElement('dc:date', date(DATE_RFC822)); |
|
$oai->appendChild($element); |
|
$element = $dom->createElement('dc:subject', $theUser->name); |
|
$oai->appendChild($element); |
|
$element = $dom->createElement('dc:contributor', ''); |
|
$oai->appendChild($element); |
|
$element = $dom->createElement('dc:creator', $user->name); |
|
$oai->appendChild($element); |
|
|
|
$element = $dom->createElement('dc:language', ''); |
|
$oai->appendChild($element); |
|
|
|
$rootElement->appendChild($datastream); |
|
} |
|
|
|
}
|
|
|