|
|
|
@ -1,7 +1,7 @@
|
|
|
|
|
<?php |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* @file |
|
|
|
|
* @file |
|
|
|
|
* Fedora Item |
|
|
|
|
*/ |
|
|
|
|
define('RELS_EXT_URI', 'info:fedora/fedora-system:def/relations-external#'); |
|
|
|
@ -18,6 +18,22 @@ class Fedora_Item {
|
|
|
|
|
public $datastreams = NULL; |
|
|
|
|
private static $connection_helper = NULL; |
|
|
|
|
private static $instantiated_pids = array(); |
|
|
|
|
private static $SoapManagedFunctions = array( |
|
|
|
|
'ingest', |
|
|
|
|
'addDataStream', |
|
|
|
|
'addRelationship', |
|
|
|
|
'export', |
|
|
|
|
'getDatastream', |
|
|
|
|
'getDatastreamHistory', |
|
|
|
|
'getNextPID', |
|
|
|
|
'getRelationships', |
|
|
|
|
'modifyDatastreamByValue', |
|
|
|
|
'modifyDatastreamByReference', |
|
|
|
|
'purgeDatastream', |
|
|
|
|
'purgeObject', |
|
|
|
|
'modifyObject', |
|
|
|
|
'setDatastreamState' |
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Create an object to represent an item in the Fedora repository. |
|
|
|
@ -58,7 +74,7 @@ class Fedora_Item {
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Forget this Object, do manually when memory constraints apply. |
|
|
|
|
* |
|
|
|
|
* |
|
|
|
|
* Removes this object from the static list of $instantiated_pids |
|
|
|
|
*/ |
|
|
|
|
function forget() { |
|
|
|
@ -66,8 +82,8 @@ class Fedora_Item {
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Exists |
|
|
|
|
* @return type |
|
|
|
|
* Exists |
|
|
|
|
* @return type |
|
|
|
|
*/ |
|
|
|
|
function exists() { |
|
|
|
|
return (!empty($this->objectProfile)); |
|
|
|
@ -81,7 +97,7 @@ class Fedora_Item {
|
|
|
|
|
* @param type $datastream_mimetype |
|
|
|
|
* @param type $controlGroup |
|
|
|
|
* @param type $logMessage |
|
|
|
|
* @return type |
|
|
|
|
* @return type |
|
|
|
|
*/ |
|
|
|
|
function add_datastream_from_file($datastream_file, $datastream_id, $datastream_label = NULL, $datastream_mimetype = '', $controlGroup = 'M', $logMessage = NULL) { |
|
|
|
|
module_load_include('inc', 'fedora_repository', 'MimeClass'); |
|
|
|
@ -116,7 +132,7 @@ class Fedora_Item {
|
|
|
|
|
* @param type $datastream_mimetype |
|
|
|
|
* @param type $controlGroup |
|
|
|
|
* @param type $logMessage |
|
|
|
|
* @return type |
|
|
|
|
* @return type |
|
|
|
|
*/ |
|
|
|
|
function add_datastream_from_url($datastream_url, $datastream_id, $datastream_label = NULL, $datastream_mimetype = '', $controlGroup = 'M', $logMessage = NULL) { |
|
|
|
|
if (empty($datastream_label)) { |
|
|
|
@ -151,7 +167,7 @@ class Fedora_Item {
|
|
|
|
|
* @param type $datastream_mimetype |
|
|
|
|
* @param type $controlGroup |
|
|
|
|
* @param type $logMessage |
|
|
|
|
* @return type |
|
|
|
|
* @return type |
|
|
|
|
*/ |
|
|
|
|
function add_datastream_from_string($str, $datastream_id, $datastream_label = NULL, $datastream_mimetype = 'text/xml', $controlGroup = 'M', $logMessage = NULL) { |
|
|
|
|
$dir = file_directory_temp(); |
|
|
|
@ -164,9 +180,8 @@ class Fedora_Item {
|
|
|
|
|
return $returnvalue; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Wrapper to add new or modify existing datastream |
|
|
|
|
* Wrapper to add new or modify existing datastream |
|
|
|
|
* @global url $base_url |
|
|
|
|
* @param url $external_url |
|
|
|
|
* @param string $dsid |
|
|
|
@ -175,7 +190,7 @@ class Fedora_Item {
|
|
|
|
|
* @param string $controlGroup |
|
|
|
|
* @param boolean $force |
|
|
|
|
* @param string $logMessage |
|
|
|
|
* @param boolean $quiet |
|
|
|
|
* @param boolean $quiet |
|
|
|
|
*/ |
|
|
|
|
function add_or_modify_by_reference($external_url, $dsid, $label, $mime_type, $controlGroup = 'M', $force = FALSE, $logMessage = 'Modified by Islandora API', $quiet=FALSE) { |
|
|
|
|
global $base_url; |
|
|
|
@ -193,7 +208,7 @@ class Fedora_Item {
|
|
|
|
|
* does not support rels-int yet. |
|
|
|
|
* @param type $relationship |
|
|
|
|
* @param type $object |
|
|
|
|
* @param type $namespaceURI |
|
|
|
|
* @param type $namespaceURI |
|
|
|
|
*/ |
|
|
|
|
function add_relationship($relationship, $object, $namespaceURI = RELS_EXT_URI) { |
|
|
|
|
$ds_list = $this->get_datastreams_list_as_array(); |
|
|
|
@ -297,7 +312,7 @@ class Fedora_Item {
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Export as foxml |
|
|
|
|
* @return type |
|
|
|
|
* @return type |
|
|
|
|
*/ |
|
|
|
|
function export_as_foxml() { |
|
|
|
|
$params = array( |
|
|
|
@ -378,7 +393,7 @@ class Fedora_Item {
|
|
|
|
|
* Get datastream dissemination |
|
|
|
|
* @param type $dsid |
|
|
|
|
* @param type $as_of_date_time |
|
|
|
|
* @return string |
|
|
|
|
* @return string |
|
|
|
|
*/ |
|
|
|
|
function get_datastream_dissemination($dsid, $as_of_date_time = "") { |
|
|
|
|
$params = array( |
|
|
|
@ -401,7 +416,7 @@ class Fedora_Item {
|
|
|
|
|
* Get datastream |
|
|
|
|
* @param type $dsid |
|
|
|
|
* @param type $as_of_date_time |
|
|
|
|
* @return type |
|
|
|
|
* @return type |
|
|
|
|
*/ |
|
|
|
|
function get_datastream($dsid, $as_of_date_time = "") { |
|
|
|
|
$params = array( |
|
|
|
@ -417,7 +432,7 @@ class Fedora_Item {
|
|
|
|
|
/** |
|
|
|
|
* Get datastream history |
|
|
|
|
* @param type $dsid |
|
|
|
|
* @return type |
|
|
|
|
* @return type |
|
|
|
|
*/ |
|
|
|
|
function get_datastream_history($dsid) { |
|
|
|
|
$params = array( |
|
|
|
@ -439,7 +454,7 @@ class Fedora_Item {
|
|
|
|
|
* @param type $method_name |
|
|
|
|
* @param type $parameters |
|
|
|
|
* @param type $as_of_date_time |
|
|
|
|
* @return string |
|
|
|
|
* @return string |
|
|
|
|
*/ |
|
|
|
|
function get_dissemination($service_definition_pid, $method_name, $parameters = array(), $as_of_date_time = NULL) { |
|
|
|
|
$params = array( |
|
|
|
@ -658,18 +673,16 @@ class Fedora_Item {
|
|
|
|
|
|
|
|
|
|
return FALSE; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Set the object to a deleted state |
|
|
|
|
*/ |
|
|
|
|
function move_to_trash($log_message = 'Flagged deleted using Islandora API.') |
|
|
|
|
{ |
|
|
|
|
function move_to_trash($log_message = 'Flagged deleted using Islandora API.') { |
|
|
|
|
// Loop through the datastreams and mark them deleted |
|
|
|
|
foreach($this->get_datastreams_list_as_array() as $dsid) |
|
|
|
|
{ |
|
|
|
|
foreach ($this->get_datastreams_list_as_array() as $dsid) { |
|
|
|
|
$this->set_datastream_state($dsid, 'D'); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Create a message to mark the object deleted |
|
|
|
|
$params = array( |
|
|
|
|
'pid' => $this->pid, |
|
|
|
@ -687,13 +700,13 @@ class Fedora_Item {
|
|
|
|
|
* Removes this object form the repository. |
|
|
|
|
* @param type $log_message |
|
|
|
|
* @param type $force |
|
|
|
|
* @return type |
|
|
|
|
* @return type |
|
|
|
|
*/ |
|
|
|
|
function purge($log_message = 'Purged using Islandora API.', $force = FALSE) { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Flag the object to be deleted first |
|
|
|
|
$this->move_to_trash($log_message); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Create the delete message |
|
|
|
|
$params = array( |
|
|
|
|
'pid' => $this->pid, |
|
|
|
@ -712,7 +725,7 @@ class Fedora_Item {
|
|
|
|
|
* @param type $end_date |
|
|
|
|
* @param type $log_message |
|
|
|
|
* @param type $force |
|
|
|
|
* @return type |
|
|
|
|
* @return type |
|
|
|
|
*/ |
|
|
|
|
function purge_datastream($dsID, $start_date = NULL, $end_date = NULL, $log_message = 'Purged datastream using Islandora API', $force = FALSE) { |
|
|
|
|
$params = array( |
|
|
|
@ -729,7 +742,7 @@ class Fedora_Item {
|
|
|
|
|
/** |
|
|
|
|
* URL |
|
|
|
|
* @global type $base_url |
|
|
|
|
* @return type |
|
|
|
|
* @return type |
|
|
|
|
*/ |
|
|
|
|
function url() { |
|
|
|
|
global $base_url; |
|
|
|
@ -739,7 +752,7 @@ class Fedora_Item {
|
|
|
|
|
/** |
|
|
|
|
* Get Next PID in Namespace |
|
|
|
|
* @param type $pid_namespace |
|
|
|
|
* @return type |
|
|
|
|
* @return type |
|
|
|
|
*/ |
|
|
|
|
static function get_next_PID_in_namespace($pid_namespace = '') { |
|
|
|
|
|
|
|
|
@ -767,7 +780,7 @@ class Fedora_Item {
|
|
|
|
|
/** |
|
|
|
|
* ingest from FOXML |
|
|
|
|
* @param type $foxml |
|
|
|
|
* @return Fedora_Item |
|
|
|
|
* @return Fedora_Item |
|
|
|
|
*/ |
|
|
|
|
static function ingest_from_FOXML($foxml) { |
|
|
|
|
$params = array('objectXML' => $foxml->saveXML(), 'format' => "info:fedora/fedora-system:FOXML-1.1", 'logMessage' => "Fedora Object Ingested"); |
|
|
|
@ -778,7 +791,7 @@ class Fedora_Item {
|
|
|
|
|
/** |
|
|
|
|
* ingest from FOXML file |
|
|
|
|
* @param type $foxml_file |
|
|
|
|
* @return type |
|
|
|
|
* @return type |
|
|
|
|
*/ |
|
|
|
|
static function ingest_from_FOXML_file($foxml_file) { |
|
|
|
|
$foxml = new DOMDocument(); |
|
|
|
@ -788,7 +801,7 @@ class Fedora_Item {
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* ingest from FOXML files in directory |
|
|
|
|
* @param type $path |
|
|
|
|
* @param type $path |
|
|
|
|
*/ |
|
|
|
|
static function ingest_from_FOXML_files_in_directory($path) { |
|
|
|
|
// Open the directory |
|
|
|
@ -816,7 +829,7 @@ class Fedora_Item {
|
|
|
|
|
* @param type $ownerId |
|
|
|
|
* @param type $logMessage |
|
|
|
|
* @param type $quiet |
|
|
|
|
* @return type |
|
|
|
|
* @return type |
|
|
|
|
*/ |
|
|
|
|
function modify_object($label = '', $state = NULL, $ownerId = NULL, $logMessage = 'Modified by Islandora API', $quiet=TRUE) { |
|
|
|
|
|
|
|
|
@ -840,7 +853,7 @@ class Fedora_Item {
|
|
|
|
|
* @param type $force |
|
|
|
|
* @param type $logMessage |
|
|
|
|
* @param type $quiet |
|
|
|
|
* @return type |
|
|
|
|
* @return type |
|
|
|
|
*/ |
|
|
|
|
function modify_datastream_by_reference($external_url, $dsid, $label, $mime_type, $force = FALSE, $logMessage = 'Modified by Islandora API', $quiet=FALSE) { |
|
|
|
|
$params = array( |
|
|
|
@ -868,7 +881,7 @@ class Fedora_Item {
|
|
|
|
|
* @param type $force |
|
|
|
|
* @param type $logMessage |
|
|
|
|
* @param type $quiet |
|
|
|
|
* @return type |
|
|
|
|
* @return type |
|
|
|
|
*/ |
|
|
|
|
function modify_datastream_by_value($content, $dsid, $label, $mime_type, $force = FALSE, $logMessage = 'Modified by Islandora API', $quiet=FALSE) { |
|
|
|
|
$params = array( |
|
|
|
@ -901,74 +914,46 @@ class Fedora_Item {
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Soap call |
|
|
|
|
* @param type $function_name |
|
|
|
|
* @param type $params_array |
|
|
|
|
* @param type $quiet |
|
|
|
|
* @return type |
|
|
|
|
* Make a soap call to the fedora API. |
|
|
|
|
* |
|
|
|
|
* @param string $function |
|
|
|
|
* The name of the soap function to call. |
|
|
|
|
* @param array $parameters |
|
|
|
|
* Paramters to pass onto the soap call |
|
|
|
|
* @param boolean $quiet |
|
|
|
|
* If TRUE suppress drupal messages. |
|
|
|
|
* |
|
|
|
|
* @return mixed |
|
|
|
|
* The return value from the soap function if successful, NULL otherwise. |
|
|
|
|
*/ |
|
|
|
|
static function soap_call($function_name, $params_array, $quiet = FALSE) { |
|
|
|
|
static function soap_call($function, $parameters, $quiet = FALSE) { |
|
|
|
|
if (!self::$connection_helper) { |
|
|
|
|
module_load_include('inc', 'fedora_repository', 'ConnectionHelper'); |
|
|
|
|
self::$connection_helper = new ConnectionHelper(); |
|
|
|
|
} |
|
|
|
|
switch ($function_name) { |
|
|
|
|
case 'ingest': |
|
|
|
|
case 'addDataStream': |
|
|
|
|
case 'addRelationship': |
|
|
|
|
case 'export': |
|
|
|
|
case 'getDatastream': |
|
|
|
|
case 'getDatastreamHistory': |
|
|
|
|
case 'getNextPID': |
|
|
|
|
case 'getRelationships': |
|
|
|
|
case 'modifyDatastreamByValue': |
|
|
|
|
case 'modifyDatastreamByReference': |
|
|
|
|
case 'purgeDatastream': |
|
|
|
|
case 'purgeObject': |
|
|
|
|
case 'modifyObject': |
|
|
|
|
case 'setDatastreamState': |
|
|
|
|
$soap_client = self::$connection_helper->getSoapClient(variable_get('fedora_soap_manage_url', 'http://localhost:8080/fedora/services/management?wsdl')); |
|
|
|
|
try { |
|
|
|
|
if (!empty($soap_client)) { |
|
|
|
|
$result = $soap_client->__soapCall($function_name, array('parameters' => $params_array)); |
|
|
|
|
} |
|
|
|
|
else { |
|
|
|
|
watchdog(t("FEDORA_REPOSITORY"), "Error trying to get SOAP client connection."); |
|
|
|
|
return NULL; |
|
|
|
|
} |
|
|
|
|
} catch (exception $e) { |
|
|
|
|
if (!$quiet) { |
|
|
|
|
|
|
|
|
|
if (preg_match('/org\.fcrepo\.server\.security\.xacml\.pep\.AuthzDeniedException/', $e->getMessage())) { |
|
|
|
|
drupal_set_message(t('Error: Insufficient permissions to call SOAP function !fn.', array('!fn' => $function_name)), 'error'); |
|
|
|
|
} |
|
|
|
|
else { |
|
|
|
|
drupal_set_message(t("Error trying to call SOAP function $function_name. Check watchdog logs for more information."), 'error'); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
watchdog(t("FEDORA_REPOSITORY"), "Error Trying to call SOAP function @fn: @e", array('@fn' => $function_name, '@e' => $e), NULL, WATCHDOG_ERROR); |
|
|
|
|
} |
|
|
|
|
return NULL; |
|
|
|
|
} |
|
|
|
|
break; |
|
|
|
|
|
|
|
|
|
default: |
|
|
|
|
try { |
|
|
|
|
$soap_client = self::$connection_helper->getSoapClient(variable_get('fedora_soap_url', 'http://localhost:8080/fedora/services/access?wsdl')); |
|
|
|
|
if (!empty($soap_client)) { |
|
|
|
|
$result = $soap_client->__soapCall($function_name, array('parameters' => $params_array)); |
|
|
|
|
} |
|
|
|
|
else { |
|
|
|
|
watchdog(t("FEDORA_REPOSITORY"), "Error trying to get SOAP client connection."); |
|
|
|
|
return NULL; |
|
|
|
|
} |
|
|
|
|
} catch (exception $e) { |
|
|
|
|
|
|
|
|
|
if (!$quiet) { |
|
|
|
|
watchdog(t("FEDORA_REPOSITORY"), "Error trying to call SOAP function @fn: @e", array('@fn' => $function_name, '@e' => $e), NULL, WATCHDOG_ERROR); |
|
|
|
|
} |
|
|
|
|
return NULL; |
|
|
|
|
$url = (array_search($function, self::$SoapManagedFunctions) !== FALSE) ? |
|
|
|
|
variable_get('fedora_soap_manage_url', 'http://localhost:8080/fedora/services/management?wsdl') : |
|
|
|
|
variable_get('fedora_soap_url', 'http://localhost:8080/fedora/services/access?wsdl'); |
|
|
|
|
try { |
|
|
|
|
$soap_client = self::$connection_helper->getSoapClient($url); |
|
|
|
|
if (isset($soap_client)) { |
|
|
|
|
$result = $soap_client->__soapCall($function, array('parameters' => $parameters)); |
|
|
|
|
} |
|
|
|
|
else { |
|
|
|
|
if (!$quiet) { |
|
|
|
|
drupal_set_message(t('Error trying to get SOAP client connection')); |
|
|
|
|
} |
|
|
|
|
watchdog('fedora_repository', 'Error trying to get SOAP client connection.'); |
|
|
|
|
return NULL; |
|
|
|
|
} |
|
|
|
|
} catch (Exception $e) { |
|
|
|
|
if (!$quiet) { |
|
|
|
|
preg_match('/org\.fcrepo\.server\.security\.xacml\.pep\.AuthzDeniedException/', $e->getMessage()) ? |
|
|
|
|
drupal_set_message(t('Insufficient permissions to call SOAP function "%func".', array('%func' => $function)), 'error') : |
|
|
|
|
drupal_set_message(t('Error trying to call SOAP function "%func". Check watchdog logs for more information.', array('%func' => $function)), 'error'); |
|
|
|
|
} |
|
|
|
|
watchdog('fedora_repository', 'Error Trying to call SOAP function "%func". Exception: @e in @f(@l)\n@t', array('%func' => $function, '@e' => $e->getMessage(), '@f' => $e->getFile(), '@l' => $e->getLine(), '@t' => $e->getTraceAsString()), NULL, WATCHDOG_ERROR); |
|
|
|
|
return NULL; |
|
|
|
|
} |
|
|
|
|
return $result; |
|
|
|
|
} |
|
|
|
@ -981,7 +966,7 @@ class Fedora_Item {
|
|
|
|
|
* @param string $state The initial state, A - Active, I - Inactive, D - Deleted |
|
|
|
|
* @param type $label |
|
|
|
|
* @param type $owner |
|
|
|
|
* @return DOMDocument |
|
|
|
|
* @return DOMDocument |
|
|
|
|
*/ |
|
|
|
|
static function create_object_FOXML($pid = '', $state = 'A', $label = 'Untitled', $owner = '') { |
|
|
|
|
$foxml = new DOMDocument("1.0", "UTF-8"); |
|
|
|
@ -1036,16 +1021,16 @@ class Fedora_Item {
|
|
|
|
|
* @param type $state |
|
|
|
|
* @param type $label |
|
|
|
|
* @param type $owner |
|
|
|
|
* @return type |
|
|
|
|
* @return type |
|
|
|
|
*/ |
|
|
|
|
static function ingest_new_item($pid = '', $state = 'A', $label = '', $owner = '') { |
|
|
|
|
return self::ingest_from_FOXML(self::create_object_FOXML($pid, $state, $label, $owner)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* fedora item exists |
|
|
|
|
* fedora item exists |
|
|
|
|
* @param type $pid |
|
|
|
|
* @return type |
|
|
|
|
* @return type |
|
|
|
|
*/ |
|
|
|
|
static function fedora_item_exists($pid) { |
|
|
|
|
$item = new Fedora_Item($pid); |
|
|
|
|