|
|
|
<?php
|
|
|
|
|
|
|
|
// $Id$
|
|
|
|
|
|
|
|
module_load_include('inc', 'fedora_repository', 'XMLDatastream');
|
|
|
|
|
|
|
|
class ContentModel extends XMLDatastream {
|
|
|
|
static $SCHEMA_URI = 'http://localhost/islandoracm.xsd';
|
|
|
|
static $DEFAULT_DSID = 'ISLANDORACM';
|
|
|
|
|
|
|
|
private $mimes = NULL;
|
|
|
|
public $pid_namespace;
|
|
|
|
public $name;
|
|
|
|
private $xpath;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Gets the default DSID to use for ContentModel datastreams.
|
|
|
|
*
|
|
|
|
* @return string $default_dsid
|
|
|
|
*/
|
|
|
|
static function getDefaultDSID() {
|
|
|
|
return variable_get('Islandora_Content_Model_DSID', ContentModel::$DEFAULT_DSID);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Constructs a ContentModel object from a Fedora item
|
|
|
|
* by getting the first content model from the hasModel relationship.
|
|
|
|
* Returns false on failure.
|
|
|
|
* @param string $pid
|
|
|
|
* @return ContentModel $cm
|
|
|
|
*/
|
|
|
|
public static function loadFromObject($pid) {
|
|
|
|
$ret = FALSE;
|
|
|
|
if (self::validPid($pid)) {
|
|
|
|
module_load_include('inc', 'fedora_repository', 'ObjectHelper');
|
|
|
|
$objectHelper=new ObjectHelper();
|
|
|
|
|
|
|
|
$content_models = $objectHelper->get_content_models_list($pid);
|
|
|
|
foreach ($content_models as $content_model) {
|
|
|
|
if ($content_model != 'fedora-system:FedoraObject-3.0') {
|
|
|
|
$ret = self::loadFromModel($content_model);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return $ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Ingests a Content Model from a file to the specified pid/dsid .
|
|
|
|
* Returns false on failure.
|
|
|
|
*
|
|
|
|
* @param string $pid
|
|
|
|
* @param string $name
|
|
|
|
* @param string $modelDsid
|
|
|
|
* @param string $file
|
|
|
|
* @return ContentModel $cm
|
|
|
|
*/
|
|
|
|
public static function ingestFromFile($pid, $name, $modelDsid, $file) {
|
|
|
|
$ret = FALSE;
|
|
|
|
|
|
|
|
if (($cm = self::loadFromModel($pid, $modelDsid)) === FALSE && file_exists($file)) {
|
|
|
|
$cm = new ContentModel(file_get_contents($file), $pid, $modelDsid);
|
|
|
|
$rootEl = $cm->xml->getElementsByTagName('content_model')->item(0);
|
|
|
|
$rootEl->setAttribute('name', $name);
|
|
|
|
|
|
|
|
module_load_include('inc', 'fedora_repository', 'api/fedora_item');
|
|
|
|
$fedoraItem = new Fedora_Item($pid);
|
|
|
|
$fedoraItem->add_datastream_from_string($cm->dumpXml(), $modelDsid, $name, 'text/xml', 'X');
|
|
|
|
$ret= $cm;
|
|
|
|
}
|
|
|
|
|
|
|
|
return $ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Ingests a Content Model from an existing model to the specified pid/dsid .
|
|
|
|
* Returns false on failure.
|
|
|
|
*
|
|
|
|
* @param string $pid
|
|
|
|
* @param string $name
|
|
|
|
* @param string $modelDsid
|
|
|
|
* @param string $copy_model_pid
|
|
|
|
* @return ContentModel $cm
|
|
|
|
*/
|
|
|
|
public static function ingestFromModel($pid, $name, $modelDsid, $copy_model_pid) {
|
|
|
|
$ret = FALSE;
|
|
|
|
|
|
|
|
if (($cm = self::loadFromModel($pid, $modelDsid)) === FALSE && ($copy_cm = self::loadFromModel($copy_model_pid)) !== FALSE && $copy_cm->validate()) {
|
|
|
|
$newDom = $copy_cm->xml;
|
|
|
|
$rootEl = $newDom->getElementsByTagName('content_model')->item(0);
|
|
|
|
$rootEl->setAttribute('name', $name);
|
|
|
|
|
|
|
|
$cm = new ContentModel($newDom, $pid, $modelDsid);
|
|
|
|
|
|
|
|
module_load_include('inc', 'fedora_repository', 'api/fedora_item');
|
|
|
|
$fedoraItem = new Fedora_Item($pid);
|
|
|
|
$fedoraItem->add_datastream_from_string($cm->dumpXml(), $modelDsid, $name, 'text/xml', 'X');
|
|
|
|
$ret = $cm;
|
|
|
|
}
|
|
|
|
|
|
|
|
return $ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Ingests a minimum Content Model to the specified pid/dsid.
|
|
|
|
* Returns false on failure.
|
|
|
|
*
|
|
|
|
* @param string $pid
|
|
|
|
* @param string $name
|
|
|
|
* @param string $modelDsid
|
|
|
|
* @param string $defaultMimetype
|
|
|
|
* @param string $ingestFromDsid
|
|
|
|
* @param integer $ingestFormPage
|
|
|
|
* @param boolean $ingestFormHideFileChooser
|
|
|
|
* @param string $ingestFormModule
|
|
|
|
* @param string $ingestFormModule
|
|
|
|
* @param string $ingestFormFile
|
|
|
|
* @param string $ingestFormClass
|
|
|
|
* @param string $ingestFormMethod
|
|
|
|
* @param string $ingestFormHandler
|
|
|
|
*
|
|
|
|
* @return ContentModel $cm
|
|
|
|
*/
|
|
|
|
public static function ingestBlankModel($pid, $name, $modelDsid, $defaultMimetype, $ingestFormDsid, $ingestFormPage, $ingestFormHideChooser, $ingestFormModule, $ingestFormModule, $ingestFormFile, $ingestFormClass, $ingestFormMethod, $ingestFormHandler) {
|
|
|
|
$ret = FALSE;
|
|
|
|
if (($cm = self::loadFromModel($pid, $modelDsid)) === FALSE) {
|
|
|
|
$newDom = new DOMDocument('1.0', 'utf-8');
|
|
|
|
$newDom->formatOutput = TRUE;
|
|
|
|
$rootEl = $newDom->createElement('content_model');
|
|
|
|
$rootEl->setAttribute('name', $name);
|
|
|
|
$rootEl->setAttribute('xmlns', self::$XMLNS);
|
|
|
|
$rootEl->setAttribute('xmlns:xsi', 'http://www.w3.org/2001/XMLSchema-instance');
|
|
|
|
$rootEl->setAttribute('xsi:schemaLocation', self::$XMLNS .' '. self::$SCHEMA_URI);
|
|
|
|
|
|
|
|
$mimeEl = $newDom->createElement('mimetypes');
|
|
|
|
$typeEl=$newDom->createElement('type', $defaultMimetype);
|
|
|
|
$mimeEl->appendChild($typeEl);
|
|
|
|
$rootEl->appendChild($mimeEl);
|
|
|
|
|
|
|
|
$ingestRulesEl = $newDom->createElement('ingest_rules');
|
|
|
|
$rootEl->appendChild($ingestRulesEl);
|
|
|
|
|
|
|
|
$ingestFormEl = $newDom->createElement('ingest_form');
|
|
|
|
$ingestFormEl->setAttribute('dsid', $ingestFormDsid);
|
|
|
|
$ingestFormEl->setAttribute('page', $ingestFormPage);
|
|
|
|
if ($ingestFormHideChooser == 'true') {
|
|
|
|
$ingestFormEl->setAttribute('hide_file_chooser', 'true');
|
|
|
|
}
|
|
|
|
|
|
|
|
$builderEl= $newDom->createElement('form_builder_method');
|
|
|
|
$builderEl->setAttribute('module', $ingestFormModule);
|
|
|
|
$builderEl->setAttribute('file', $ingestFormFile);
|
|
|
|
$builderEl->setAttribute('class', $ingestFormClass);
|
|
|
|
$builderEl->setAttribute('method', $ingestFormMethod);
|
|
|
|
$builderEl->setAttribute('handler', $ingestFormHandler);
|
|
|
|
$ingestFormEl->appendChild($builderEl);
|
|
|
|
|
|
|
|
$elementsEl = $newDom->createElement('form_elements');
|
|
|
|
$ingestFormEl->appendChild($elementsEl);
|
|
|
|
$rootEl->appendChild($ingestFormEl);
|
|
|
|
$newDom->appendChild($rootEl);
|
|
|
|
|
|
|
|
$cm = new ContentModel($newDom, $pid, $modelDsid);
|
|
|
|
|
|
|
|
module_load_include('inc', 'fedora_repository', 'api/fedora_item');
|
|
|
|
$fedoraItem = new Fedora_Item($pid);
|
|
|
|
$fedoraItem->add_datastream_from_string($cm->dumpXml(), $modelDsid, $name, 'text/xml', 'X');
|
|
|
|
$ret = $cm;
|
|
|
|
}
|
|
|
|
|
|
|
|
return $ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Constructs a ContentModel object from the PID of the model in Fedora.
|
|
|
|
* If DSID is specified it will use that datastream as the model, otherwise it will
|
|
|
|
* use the default (usually ISLANDORACM). PID_NAMESPACE and name can also be initialized
|
|
|
|
* from the collection policy.
|
|
|
|
* Returns false on failure.
|
|
|
|
*
|
|
|
|
* NOTE: $name will be overwritten with the content model name found in the datastream
|
|
|
|
* when the model is first validated.\
|
|
|
|
*
|
|
|
|
* @param string $pid
|
|
|
|
* @param string $dsid
|
|
|
|
* @param string $pid_namespace
|
|
|
|
* @param string $name
|
|
|
|
* @return ContentModel $cm
|
|
|
|
*/
|
|
|
|
public static function loadFromModel($pid, $dsid = NULL, $pid_namespace = NULL, $name = NULL) {
|
|
|
|
$ret = FALSE;
|
|
|
|
module_load_include('inc', 'fedora_repository', 'api/fedora_item');
|
|
|
|
try {
|
|
|
|
if (self::validPid($pid)) {
|
|
|
|
$fedoraItem = new Fedora_Item($pid);
|
|
|
|
$dsid = ($dsid != NULL && self::validDsid($dsid)) ? $dsid : ContentModel::getDefaultDSID();
|
|
|
|
$ds = $fedoraItem->get_datastream_dissemination($dsid);
|
|
|
|
if (!empty($ds)) {
|
|
|
|
$ret=new ContentModel($ds, $pid, $dsid, $pid_namespace, $name);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
catch (SOAPException $e) {
|
|
|
|
$ret = FALSE;
|
|
|
|
}
|
|
|
|
return $ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Constructor
|
|
|
|
* NOTE: Use the static constructor methods whenever possible.
|
|
|
|
*
|
|
|
|
* @param string $xmlStr
|
|
|
|
* @param string $pid
|
|
|
|
* @param string $dsid
|
|
|
|
* @param string $pid_namespace
|
|
|
|
* @param string $name
|
|
|
|
* @return XMLDatastream $cm
|
|
|
|
*/
|
|
|
|
public function __construct($xmlStr, $pid = NULL, $dsid = NULL, $pid_namespace = NULL, $name = NULL) {
|
|
|
|
parent::__construct($xmlStr, $pid, $dsid);
|
|
|
|
$this->pid_namespace = $pid_namespace;
|
|
|
|
$this->name = ($name == NULL)?'Islandora Content Model':$name;
|
|
|
|
$this->xpath = new DOMXPath($this->xml);
|
|
|
|
$this->xpath->registerNamespace('cm', 'http://www.islandora.ca');
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Attempts to convert from the old XML schema to the new by
|
|
|
|
* traversing the XML DOM and building a new DOM. When done
|
|
|
|
* $this->xml is replaced by the newly created DOM..
|
|
|
|
*
|
|
|
|
* @return void
|
|
|
|
*/
|
|
|
|
protected function convertFromOldSchema() {
|
|
|
|
$sXml = simplexml_load_string($this->xml->saveXML());
|
|
|
|
$newDom = new DOMDocument('1.0', 'utf-8');
|
|
|
|
$newDom->formatOutput = TRUE;
|
|
|
|
$rootEl = $newDom->createElement('content_model');
|
|
|
|
$rootEl->setAttribute('name', $sXml['name']);
|
|
|
|
$rootEl->setAttribute('xmlns', self::$XMLNS);
|
|
|
|
$rootEl->setAttribute('xmlns:xsi', 'http://www.w3.org/2001/XMLSchema-instance');
|
|
|
|
$rootEl->setAttribute('xsi:schemaLocation', self::$XMLNS .' ' . self::$SCHEMA_URI);
|
|
|
|
|
|
|
|
$mimeEl = $newDom->createElement('mimetypes');
|
|
|
|
foreach ($sXml->mimetypes->type as $mime) {
|
|
|
|
$typeEl = $newDom->createElement('type', $mime);
|
|
|
|
$mimeEl->appendChild($typeEl);
|
|
|
|
}
|
|
|
|
$rootEl->appendChild($mimeEl);
|
|
|
|
|
|
|
|
$ingestRulesEl = $newDom->createElement('ingest_rules');
|
|
|
|
foreach ($sXml->ingest_rules->rule as $rule) {
|
|
|
|
$ruleEl = $newDom->createElement('rule');
|
|
|
|
foreach ($rule->applies_to as $appTo) {
|
|
|
|
$applToEl = $newDom->createElement('applies_to', trim($appTo));
|
|
|
|
$ruleEl->appendChild($applToEl);
|
|
|
|
}
|
|
|
|
if (isset($rule->methods->method) && count($rule->methods->method) > 0) {
|
|
|
|
$methodsEl = $newDom->createElement('ingest_methods');
|
|
|
|
foreach ($rule->methods->method as $method) {
|
|
|
|
$methodEl = $newDom->createElement('ingest_method');
|
|
|
|
$methodEl->setAttribute('module', $method->module);
|
|
|
|
$methodEl->setAttribute('file', $method->file);
|
|
|
|
$methodEl->setAttribute('class', $method->class_name);
|
|
|
|
$methodEl->setAttribute('method', $method->method_name);
|
|
|
|
$methodEl->setAttribute('dsid', $method->datastream_id);
|
|
|
|
$methodEl->setAttribute('modified_files_ext', $method->modified_files_ext);
|
|
|
|
|
|
|
|
if (isset($method->parameters)) {
|
|
|
|
$paramsEl = $newDom->createElement('parameters');
|
|
|
|
foreach ($method->parameters->parameter as $param) {
|
|
|
|
$paramEl = $newDom->createElement('parameter', $param);
|
|
|
|
$paramEl->setAttribute('name', $param['name']);
|
|
|
|
$paramsEl->appendChild($paramEl);
|
|
|
|
}
|
|
|
|
$methodEl->appendChild($paramsEl);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
$methodsEl->appendChild($methodEl);
|
|
|
|
}
|
|
|
|
$ruleEl->appendChild($methodsEl);
|
|
|
|
$ingestRulesEl->appendChild($ruleEl);
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
$rootEl->appendChild($ingestRulesEl);
|
|
|
|
|
|
|
|
if (isset($sXml->display_in_fieldset) && count($sXml->display_in_fieldset->datastream) > 0) {
|
|
|
|
$datastreamsEl = $newDom->createElement('datastreams');
|
|
|
|
|
|
|
|
foreach ($sXml->display_in_fieldset->datastream as $ds) {
|
|
|
|
$dsEl = $newDom->createElement('datastream');
|
|
|
|
$dsEl->setAttribute('dsid', $ds['id']);
|
|
|
|
|
|
|
|
if (isset($ds->add_datastream_method)) {
|
|
|
|
$add_ds_methodEl = $newDom->createElement('add_datastream_method');
|
|
|
|
$add_ds_methodEl->setAttribute('module', $ds->add_datastream_method->module);
|
|
|
|
$add_ds_methodEl->setAttribute('file', $ds->add_datastream_method->file);
|
|
|
|
$add_ds_methodEl->setAttribute('class', $ds->add_datastream_method->class_name);
|
|
|
|
$add_ds_methodEl->setAttribute('method', $ds->add_datastream_method->method_name);
|
|
|
|
$add_ds_methodEl->setAttribute('dsid', $ds->add_datastream_method->datastream_id);
|
|
|
|
$add_ds_methodEl->setAttribute('modified_files_ext', $ds->add_datastream_method->modified_files_ext);
|
|
|
|
|
|
|
|
if (isset($ds->add_datastream_method->parameters)) {
|
|
|
|
$paramsEl = $newDom->createElement('parameters');
|
|
|
|
foreach ($ds->add_datastream_method->parameters->parameter as $param) {
|
|
|
|
$paramEl = $newDom->createElement('parameter', $param);
|
|
|
|
$paramEl->setAttribute('name', $param['name']);
|
|
|
|
$paramsEl->appendChild($paramEl);
|
|
|
|
}
|
|
|
|
$add_ds_methodEl->appendChild($paramsEl);
|
|
|
|
}
|
|
|
|
|
|
|
|
$dsEl->appendChild($add_ds_methodEl);
|
|
|
|
}
|
|
|
|
|
|
|
|
foreach ($ds->method as $disp_meth) {
|
|
|
|
$disp_methEl = $newDom->createElement('display_method');
|
|
|
|
$disp_methEl->setAttribute('module', $disp_meth->module);
|
|
|
|
$disp_methEl->setAttribute('file', $disp_meth->file);
|
|
|
|
$disp_methEl->setAttribute('class', $disp_meth->class_name);
|
|
|
|
$disp_methEl->setAttribute('method', $disp_meth->method_name);
|
|
|
|
$dsEl->appendChild($disp_methEl);
|
|
|
|
}
|
|
|
|
$datastreamsEl->appendChild($dsEl);
|
|
|
|
}
|
|
|
|
$rootEl->appendChild($datastreamsEl);
|
|
|
|
}
|
|
|
|
|
|
|
|
$ingest_formEl = $newDom->createElement('ingest_form');
|
|
|
|
$ingest_formEl->setAttribute('dsid', $sXml->ingest_form['dsid']);
|
|
|
|
$ingest_formEl->setAttribute('page', $sXml->ingest_form['page']);
|
|
|
|
if (isset($sXml->ingest_form['hide_file_chooser'])) {
|
|
|
|
$ingest_formEl->setAttribute('hide_file_chooser', (strtolower($sXml->ingest_form['hide_file_chooser']) == 'true') ? 'true' : 'false');
|
|
|
|
}
|
|
|
|
|
|
|
|
$form_builderEl = $newDom->createElement('form_builder_method');
|
|
|
|
$form_builderEl->setAttribute('module', $sXml->ingest_form->form_builder_method->module);
|
|
|
|
$form_builderEl->setAttribute('file', $sXml->ingest_form->form_builder_method->file);
|
|
|
|
$form_builderEl->setAttribute('class', $sXml->ingest_form->form_builder_method->class_name);
|
|
|
|
$form_builderEl->setAttribute('method', $sXml->ingest_form->form_builder_method->method_name);
|
|
|
|
$form_builderEl->setAttribute('handler', $sXml->ingest_form->form_builder_method->form_handler);
|
|
|
|
$ingest_formEl->appendChild($form_builderEl);
|
|
|
|
|
|
|
|
$form_elementsEl = $newDom->createElement('form_elements');
|
|
|
|
foreach ($sXml->ingest_form->form_elements->element as $element) {
|
|
|
|
|
|
|
|
//I found an XML where the label was HTML.. this code will attempt to
|
|
|
|
//walk the object setting the label to be the first string it finds.
|
|
|
|
if (count(get_object_vars($element->label)) > 0) {
|
|
|
|
$obj=$element->label;
|
|
|
|
while ($obj != NULL && !is_string($obj)) {
|
|
|
|
$keys = get_object_vars($obj);
|
|
|
|
$obj = array_shift($keys);
|
|
|
|
}
|
|
|
|
$element->label=($obj == NULL) ? '' : $obj;
|
|
|
|
}
|
|
|
|
|
|
|
|
$elEl = $newDom->createElement('element');
|
|
|
|
$elEl->setAttribute('label', $element->label);
|
|
|
|
$elEl->setAttribute('name', $element->name);
|
|
|
|
$elEl->setAttribute('type', $element->type);
|
|
|
|
if (strtolower($element->required) == 'true') {
|
|
|
|
$elEl->setAttribute('required', 'true');
|
|
|
|
}
|
|
|
|
if (isset($element->description) && trim($element->description) != '') {
|
|
|
|
$descEl = $newDom->createElement('description', trim($element->description));
|
|
|
|
$elEl->appendChild($descEl);
|
|
|
|
}
|
|
|
|
if (isset($element->authoritative_list)) {
|
|
|
|
$authListEl = $newDom->createElement('authoritative_list');
|
|
|
|
foreach ($element->authoritative_list->item as $item) {
|
|
|
|
$itemEl = $newDom->createElement('item', trim($item->value));
|
|
|
|
if (trim($item->value) != trim($item->field)) {
|
|
|
|
$itemEl->setAttribute('field', trim($item->field));
|
|
|
|
}
|
|
|
|
$authListEl->appendChild($itemEl);
|
|
|
|
}
|
|
|
|
$elEl->appendChild($authListEl);
|
|
|
|
}
|
|
|
|
$form_elementsEl->appendChild($elEl);
|
|
|
|
}
|
|
|
|
$ingest_formEl->appendChild($form_builderEl);
|
|
|
|
$ingest_formEl->appendChild($form_elementsEl);
|
|
|
|
$rootEl->appendChild($ingest_formEl);
|
|
|
|
|
|
|
|
if (isset($sXml->edit_metadata) &&
|
|
|
|
trim($sXml->edit_metadata->build_form_method->module) != '' &&
|
|
|
|
trim($sXml->edit_metadata->build_form_method->file) != '' &&
|
|
|
|
trim($sXml->edit_metadata->build_form_method->class_name) != '' &&
|
|
|
|
trim($sXml->edit_metadata->build_form_method->method_name) != '' &&
|
|
|
|
trim($sXml->edit_metadata->submit_form_method->method_name) != '' &&
|
|
|
|
trim($sXml->edit_metadata->build_form_method['dsid']) != ''
|
|
|
|
) {
|
|
|
|
$edit_metadata_methodEl= $newDom->createElement('edit_metadata_method');
|
|
|
|
$edit_metadata_methodEl->setAttribute('module', $sXml->edit_metadata->build_form_method->module);
|
|
|
|
$edit_metadata_methodEl->setAttribute('file', $sXml->edit_metadata->build_form_method->file);
|
|
|
|
$edit_metadata_methodEl->setAttribute('class', $sXml->edit_metadata->build_form_method->class_name);
|
|
|
|
$edit_metadata_methodEl->setAttribute('method', $sXml->edit_metadata->build_form_method->method_name);
|
|
|
|
$edit_metadata_methodEl->setAttribute('handler', $sXml->edit_metadata->submit_form_method->method_name);
|
|
|
|
$edit_metadata_methodEl->setAttribute('dsid', $sXml->edit_metadata->build_form_method['dsid']);
|
|
|
|
$rootEl->appendChild($edit_metadata_methodEl);
|
|
|
|
}
|
|
|
|
|
|
|
|
$newDom->appendChild($rootEl);
|
|
|
|
|
|
|
|
$this->xml = DOMDocument::loadXML($newDom->saveXml());
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Gets a list of service deployments that this model has.
|
|
|
|
*
|
|
|
|
* NOTE: Not currently being used.
|
|
|
|
*
|
|
|
|
* @return String[] $serviceDepPids
|
|
|
|
*/
|
|
|
|
public function getServices() {
|
|
|
|
$query = 'select $object $title from <#ri>
|
|
|
|
where ($object <dc:title> $title
|
|
|
|
and $object <fedora-model:isDeploymentOf> $deploymentOf
|
|
|
|
and $object <fedora-model:hasModel> <info:fedora/fedora-system:ServiceDeployment-3.0>
|
|
|
|
and $object <fedora-model:isContractorOf> <info:fedora/'. $this->pid .'>
|
|
|
|
and $object <fedora-model:state> <info:fedora/fedora-system:def/model#Active>)
|
|
|
|
order by $title';
|
|
|
|
|
|
|
|
module_load_include('inc', 'fedora_repository', 'CollectionClass');
|
|
|
|
|
|
|
|
$collectionHelper = new CollectionClass();
|
|
|
|
$xml = simplexml_load_string($collectionHelper->getRelatedItems($this->pid, $query));
|
|
|
|
|
|
|
|
$results = array();
|
|
|
|
foreach ($xml->results->result as $result) {
|
|
|
|
$pid = strval(($result->object['uri']));
|
|
|
|
$pid = substr($pid, strpos($pid, "/") + 1, strlen($pid));
|
|
|
|
$results[] = $pid;
|
|
|
|
}
|
|
|
|
|
|
|
|
return $results;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Gets the name of the ContentModel
|
|
|
|
* Returns false on failure.
|
|
|
|
*
|
|
|
|
* @return String $name
|
|
|
|
*/
|
|
|
|
public function getName() {
|
|
|
|
$ret = FALSE;
|
|
|
|
if ($this->name != NULL) {
|
|
|
|
$ret = $this->name;
|
|
|
|
}
|
|
|
|
elseif ($this->validate()) {
|
|
|
|
$rootEl = $this->xml->getElementsByTagName('content_model')->item(0);
|
|
|
|
$this->name = $rootEl->getAttribute('name');
|
|
|
|
$ret = $this->name;
|
|
|
|
}
|
|
|
|
return $ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Gets the element corresponding to the datastream specified
|
|
|
|
* in the <datastreams> element of the schema.
|
|
|
|
* Returns FALSE on failure.
|
|
|
|
*
|
|
|
|
* @param $dsid
|
|
|
|
* @return DOMElement $datastream
|
|
|
|
*/
|
|
|
|
private function getDSModel($dsid) {
|
|
|
|
$ret = FALSE;
|
|
|
|
if (self::validDsid($dsid) && $this->validate()) {
|
|
|
|
$result=$this->xml->getElementsByTagName('datastreams');
|
|
|
|
if ($result->length > 0) {
|
|
|
|
$result=$result->item(0)->getElementsByTagName('datastream');
|
|
|
|
for ($i = 0; $ret == FALSE && $i < $result->length; $i++) {
|
|
|
|
if ($result->item($i)->getAttribute('dsid') == $dsid)
|
|
|
|
$ret=$result->item($i);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return $ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Gets an array of form elements to use in the ingest form. The results of this array are passed
|
|
|
|
* to the specified ingest form builder. The form builder can optionally not use the elements as defined
|
|
|
|
* in the form builder if more complex forms or behaviour is required.
|
|
|
|
* Each element has the following keys: 'label', 'type', 'required', 'description', and if defined, 'authoritative_list' and/or 'parameters'
|
|
|
|
*
|
|
|
|
* @return string[] $elements
|
|
|
|
*/
|
|
|
|
public function getIngestFormElements() {
|
|
|
|
$ret = FALSE;
|
|
|
|
if ($this->validate()) {
|
|
|
|
$elements_array = array();
|
|
|
|
$form_elements_wrapper = $this->xml->getElementsbyTagName('ingest_form')->item(0)->getElementsByTagName('form_elements');
|
|
|
|
|
|
|
|
if ($form_elements_wrapper->length == 0) {
|
|
|
|
return $ret;
|
|
|
|
}
|
|
|
|
$elements = $this->xml->getElementsbyTagName('ingest_form')->item(0)->getElementsByTagName('form_elements')->item(0)->getElementsByTagName('element');
|
|
|
|
for ($i=0;$i<$elements->length;$i++) {
|
|
|
|
$desc = $elements->item($i)->getElementsByTagName('description');
|
|
|
|
$desc = ($desc->length > 0)?$desc->item(0)->nodeValue:'';
|
|
|
|
|
|
|
|
$label = $elements->item($i)->getAttribute('label');
|
|
|
|
if ($label == NULL) {
|
|
|
|
$label=$elements->item($i)->getAttribute('name');
|
|
|
|
}
|
|
|
|
|
|
|
|
$element=array('name' => $elements->item($i)->getAttribute('name'),
|
|
|
|
'label' => $label,
|
|
|
|
'type' => $elements->item($i)->getAttribute('type'),
|
|
|
|
'required' => ($elements->item($i)->getAttribute('required') == 'true') ? TRUE : FALSE,
|
|
|
|
'description' => $desc
|
|
|
|
);
|
|
|
|
|
|
|
|
$auth_list = $elements->item($i)->getElementsByTagName('authoritative_list');
|
|
|
|
if ($auth_list->length > 0) {
|
|
|
|
$list = array();
|
|
|
|
$items = $auth_list->item(0)->getElementsByTagName('item');
|
|
|
|
for ($j = 0; $j < $items->length; $j++) {
|
|
|
|
$field = $items->item($j)->attributes->getNamedItem('field');
|
|
|
|
$list[ $items->item($j)->nodeValue ] = ($field !== NULL) ? $field->nodeValue : $items->item($j)->nodeValue;
|
|
|
|
}
|
|
|
|
$element['authoritative_list']=$list;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
$params = $elements->item($i)->getElementsByTagName('parameters');
|
|
|
|
$list = array();
|
|
|
|
if ($params->length > 0) {
|
|
|
|
$items = $params->item(0)->getElementsByTagName('parameter');
|
|
|
|
for ($j = 0; $j < $items->length; $j++) {
|
|
|
|
$value = $items-> item($j)->nodeValue;
|
|
|
|
$list[$items->item($j)->getAttribute('name')] = (strtolower($value) == 'true' ? TRUE : (strtolower($value) == 'false' ? FALSE : $value));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
$element['parameters'] = $list;
|
|
|
|
|
|
|
|
$elements_array[] = $element;
|
|
|
|
}
|
|
|
|
$ret = $elements_array;
|
|
|
|
}
|
|
|
|
|
|
|
|
return $ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Decrements an ingest form element in the list of elements.
|
|
|
|
* Updates the "order". This method is simply an overload to the incIngestFormElement
|
|
|
|
* which has a direction parameter.
|
|
|
|
*
|
|
|
|
* TODO: Might be useful to move multiple places at once, or define
|
|
|
|
* a method to move to an absolute position.
|
|
|
|
*
|
|
|
|
* @param String $name
|
|
|
|
* @return boolean $success
|
|
|
|
*/
|
|
|
|
public function decIngestFormElement($name) {
|
|
|
|
return $this->incIngestFormElement($name, 'dec');
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Increments (or decrements) ingest form element in the list of elements.
|
|
|
|
* Updates the "order". The $reorder parameter accepts 'inc' or 'dec' to
|
|
|
|
* specify the direction to move (defaults to increment.)
|
|
|
|
*
|
|
|
|
* TODO: Might be useful to move multiple places at once, or define
|
|
|
|
* a method to move to an absolute position.
|
|
|
|
*
|
|
|
|
* @param String $name
|
|
|
|
* @param String $reorder
|
|
|
|
* @return boolean $success
|
|
|
|
*/
|
|
|
|
public function incIngestFormElement($name, $reorder = 'inc') {
|
|
|
|
$ret = FALSE;
|
|
|
|
if ($this->validate()) {
|
|
|
|
$elementsEl = $this->xml->getElementsbyTagName('ingest_form')->item(0)->getElementsByTagName('form_elements')->item(0);
|
|
|
|
$elements = $elementsEl->getElementsByTagName('element');
|
|
|
|
$found = FALSE;
|
|
|
|
$refEl = FALSE;
|
|
|
|
for ($i = 0; $found === FALSE && $i < $elements->length; $i++) {
|
|
|
|
if ($elements->item($i)->getAttribute('name') == trim($name)) {
|
|
|
|
if ($reorder == 'inc') {
|
|
|
|
$found=$elements->item($i);
|
|
|
|
$refEl = ($i > 0)?$elements->item($i-1):false;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
$found = ($i + 1 < $elements->length) ? $elements->item($i + 1) : FALSE;
|
|
|
|
$refEl = $elements->item($i);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($found !== FALSE) {
|
|
|
|
$elementsEl->removeChild($found);
|
|
|
|
$elementsEl->insertBefore($found, $refEl);
|
|
|
|
$ret = TRUE;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return $ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Removes an ingest form element from the list of ingest form elements.
|
|
|
|
* @param String $name
|
|
|
|
* @return boolean $success
|
|
|
|
*/
|
|
|
|
public function removeIngestFormElement($name) {
|
|
|
|
$ret = FALSE;
|
|
|
|
if ($this->validate()) {
|
|
|
|
$elementsEl = $this->xml->getElementsbyTagName('ingest_form')->item(0)->getElementsByTagName('form_elements')->item(0);
|
|
|
|
$elements = $elementsEl->getElementsByTagName('element');
|
|
|
|
$found = FALSE;
|
|
|
|
for ($i = 0; $found === FALSE && $i < $elements->length; $i++) {
|
|
|
|
if ($elements->item($i)->getAttribute('name') == trim($name)) {
|
|
|
|
$found=$elements->item($i);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($found !== FALSE) {
|
|
|
|
$elementsEl->removeChild($found);
|
|
|
|
$ret = TRUE;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return $ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Sets a parameter of an ingest form element. If the value of the element is FALSE the parameter
|
|
|
|
* will be removed entirely (if you want to store false as a value, then send the String "false").
|
|
|
|
*
|
|
|
|
* @param String $elementName
|
|
|
|
* @param String $paramName
|
|
|
|
* @param String $paramValue
|
|
|
|
* @return boolean success
|
|
|
|
*/
|
|
|
|
public function setIngestFormElementParam($name, $paramName, $paramValue) {
|
|
|
|
$ret = FALSE;
|
|
|
|
|
|
|
|
if ($this->validate()) {
|
|
|
|
$elements = $this->xml->getElementsbyTagName('ingest_form')->item(0)->getElementsByTagName('form_elements')->item(0)->getElementsByTagName('element');
|
|
|
|
$element = FALSE;
|
|
|
|
for ($i = 0; $element === FALSE && $i < $elements->length; $i++) {
|
|
|
|
if ($elements->item($i)->getAttribute('name') == $name) {
|
|
|
|
$element = $elements->item($i);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($element !== FALSE) {
|
|
|
|
$paramsEl = $element->getElementsByTagName('parameters');
|
|
|
|
if ($paramsEl->length == 0) {
|
|
|
|
if ($paramValue !== FALSE) {
|
|
|
|
$paramsEl = $this->xml->createElement('parameters');
|
|
|
|
$element->appendChild($paramsEl);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
$ret = TRUE;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
$paramsEl=$paramsEl->item(0);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!$ret) {
|
|
|
|
$params = $paramsEl->getElementsByTagName('parameter');
|
|
|
|
$found = FALSE;
|
|
|
|
for ($i = 0; $found === FALSE && $i < $params->length; $i++) {
|
|
|
|
if ($params->item($i)->getAttribute('name') == $paramName) {
|
|
|
|
$found=$params->item($i);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($paramValue === FALSE) {
|
|
|
|
if ($found !== FALSE) {
|
|
|
|
$paramsEl->removeChild($found);
|
|
|
|
if ($params->length == 0) {
|
|
|
|
$element->removeChild($paramsEl);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
$ret = TRUE;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
if ($found !== FALSE) {
|
|
|
|
$found->nodeValue = $paramValue;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
$paramEl=$this->xml->createElement('parameter', $paramValue);
|
|
|
|
$paramEl->setAttribute('name', $paramName);
|
|
|
|
$paramsEl->appendChild($paramEl);
|
|
|
|
}
|
|
|
|
$ret = TRUE;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return $ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Gets a list of all parameters that belong to the specified ingest form element.
|
|
|
|
*
|
|
|
|
* @param String $elementName
|
|
|
|
* @return boolean success
|
|
|
|
*/
|
|
|
|
public function getIngestFormElementParams($name) {
|
|
|
|
$ret = FALSE;
|
|
|
|
|
|
|
|
if ($this->validate()) {
|
|
|
|
$elements = $this->xml->getElementsbyTagName('ingest_form')->item(0)->getElementsByTagName('form_elements')->item(0)->getElementsByTagName('element');
|
|
|
|
$element = FALSE;
|
|
|
|
for ($i=0; $element === FALSE && $i < $elements->length; $i++) {
|
|
|
|
if ($elements->item($i)->getAttribute('name') == $name) {
|
|
|
|
$element = $elements->item($i);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($element !== FALSE) {
|
|
|
|
$ret = array();
|
|
|
|
$paramsEl = $element->getElementsByTagName('parameters');
|
|
|
|
|
|
|
|
if ($paramsEl->length > 0) {
|
|
|
|
$params = $paramsEl->item(0)->getElementsByTagName('parameter');
|
|
|
|
for ($i = 0; $i < $params->length; $i++) {
|
|
|
|
$ret[$params->item($i)->getAttribute('name')]=$params->item($i)->nodeValue;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return $ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Edits the ingest form element specified.
|
|
|
|
* NOTE: The element name can not be changed. To update an elements name
|
|
|
|
* it must be deleted and added with the new name.
|
|
|
|
*
|
|
|
|
* @param String $name
|
|
|
|
* @param String $label
|
|
|
|
* @param String $type
|
|
|
|
* @param boolean $required
|
|
|
|
* @param String description
|
|
|
|
* @return boolean success
|
|
|
|
*/
|
|
|
|
public function editIngestFormElement($name, $label, $type, $required, $description) {
|
|
|
|
$ret = FALSE;
|
|
|
|
if ($this->validate()) {
|
|
|
|
$elements = $this->xml->getElementsbyTagName('ingest_form')->item(0)->getElementsByTagName('form_elements')->item(0)->getElementsByTagName('element');
|
|
|
|
$found = FALSE;
|
|
|
|
for ($i = 0; $found === FALSE && $i < $elements->length; $i++) {
|
|
|
|
if ($elements->item($i)->getAttribute('name') == $name) {
|
|
|
|
$found = $elements->item($i);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
$found->setAttribute('name', $name);
|
|
|
|
$found->setAttribute('type', $type);
|
|
|
|
$found->setAttribute('required', $required ? 'true' : 'false');
|
|
|
|
if (trim($label) != '' && trim($label) != trim($name)) {
|
|
|
|
$found->setAttribute('label', $label);
|
|
|
|
}
|
|
|
|
elseif ($found->getAttribute('label') != '') {
|
|
|
|
$found->removeAttribute('label');
|
|
|
|
}
|
|
|
|
|
|
|
|
$descEl=$found->getElementsByTagName('description');
|
|
|
|
if (trim($description) != '') {
|
|
|
|
if ($descEl->length > 0) {
|
|
|
|
$descEl=$descEl->item(0);
|
|
|
|
$descEl->nodeValue = $description;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
$descEl = $this->xml->createElement('description', $description);
|
|
|
|
$found->appendChild($descEl);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
elseif ($descEl->length > 0) {
|
|
|
|
$found->removeChild($descEl->item(0));
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($found->getAttribute('type') != 'select' && $found->getAttribute('type') != 'radio') {
|
|
|
|
$authList = $found->getElementsByTagName('authoritative_list');
|
|
|
|
if ($authList->length > 0) {
|
|
|
|
$found->removeChild($authList->item(0));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
$ret = TRUE;
|
|
|
|
}
|
|
|
|
return $ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Add an ingest form element to the model.
|
|
|
|
*
|
|
|
|
* @param String $name
|
|
|
|
* @param String $label
|
|
|
|
* @param String $type
|
|
|
|
* @param boolean $required
|
|
|
|
* @param String $description
|
|
|
|
* @return boolean $success
|
|
|
|
*/
|
|
|
|
public function addIngestFormElement($name, $label, $type, $required, $description = '') {
|
|
|
|
$ret = FALSE;
|
|
|
|
if ($this->validate()) {
|
|
|
|
$elements = $this->xml->getElementsbyTagName('ingest_form')->item(0)->getElementsByTagName('form_elements')->item(0);
|
|
|
|
$elementEl = $this->xml->createElement('element');
|
|
|
|
$elementEl->setAttribute('name', $name);
|
|
|
|
$elementEl->setAttribute('type', $type);
|
|
|
|
$elementEl->setAttribute('required', $requiredi ? 'true' : 'false');
|
|
|
|
if (trim($label) != '' && trim($label) != trim($name)) {
|
|
|
|
$elementEl->setAttribute('label', $label);
|
|
|
|
}
|
|
|
|
if (trim($description) != '') {
|
|
|
|
$descEl=$this->xml->createElement('description', $description);
|
|
|
|
$elementEl->appendChild($descEl);
|
|
|
|
}
|
|
|
|
$elements->appendChild($elementEl);
|
|
|
|
|
|
|
|
$ret = TRUE;
|
|
|
|
}
|
|
|
|
return $ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Decrements an authority list item from a form element in the list of elements.
|
|
|
|
* Updates the "order". This method is simply an overload to the incAuthListItem
|
|
|
|
* which has a direction parameter.
|
|
|
|
|
|
|
|
*
|
|
|
|
* @param String $elementName
|
|
|
|
* @param String $value
|
|
|
|
* @return boolean $success
|
|
|
|
*/
|
|
|
|
public function decAuthListItem($elementName, $value) {
|
|
|
|
return $this->incAuthListItem($elementName, $value, 'dec');
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Increments (or decrements) an authority list item from a form element in the list of elements.
|
|
|
|
* Updates the "order".
|
|
|
|
*
|
|
|
|
* @param String $elementName
|
|
|
|
* @param String $value
|
|
|
|
* @param String $direction
|
|
|
|
* @return boolean $success
|
|
|
|
*/
|
|
|
|
public function incAuthListItem($elementName, $value, $reorder = 'inc') {
|
|
|
|
$ret = FALSE;
|
|
|
|
if ($this->validate()) {
|
|
|
|
$elements = $this->xml->getElementsbyTagName('ingest_form')->item(0)->getElementsByTagName('form_elements')->item(0)->getElementsByTagName('element');
|
|
|
|
$found = FALSE;
|
|
|
|
for ($i = 0; $found === FALSE && $i < $elements->length; $i++) {
|
|
|
|
if ($elements->item($i)->getAttribute('name') == $elementName) {
|
|
|
|
$found = $elements->item($i);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($found !== FALSE) {
|
|
|
|
|
|
|
|
$authListEl = $found->getElementsByTagName('authoritative_list');
|
|
|
|
if ($authListEl->length > 0) {
|
|
|
|
$authListEl = $authListEl->item(0);
|
|
|
|
|
|
|
|
$items = $authListEl->getElementsByTagName('item');
|
|
|
|
$found = FALSE;
|
|
|
|
$refEl = FALSE;
|
|
|
|
for ($i = 0; $found === FALSE && $i < $items->length; $i++) {
|
|
|
|
if ($items->item($i)->nodeValue == $value) {
|
|
|
|
if ($reorder == 'inc') {
|
|
|
|
$refEl = ($i > 0) ? $items->item($i - 1) : FALSE;
|
|
|
|
$found = $items->item($i);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
$refEl = $items->item($i);
|
|
|
|
$found = ($i + 1 < $items->length) ? $items->item($i + 1) : FALSE;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($found !== FALSE && $refEl !== FALSE) {
|
|
|
|
$authListEl->removeChild($found);
|
|
|
|
$authListEl->insertBefore($found, $refEl);
|
|
|
|
$ret = TRUE;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return $ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Removes an authority list item from a form element.
|
|
|
|
@param String $elementName
|
|
|
|
@param String $value
|
|
|
|
@return boolean $success
|
|
|
|
*/
|
|
|
|
public function removeAuthListItem($elementName, $value) {
|
|
|
|
$ret = FALSE;
|
|
|
|
if ($this->validate()) {
|
|
|
|
$elements = $this->xml->getElementsbyTagName('ingest_form')->item(0)->getElementsByTagName('form_elements')->item(0)->getElementsByTagName('element');
|
|
|
|
$found = FALSE;
|
|
|
|
for ($i = 0; $found === FALSE && $i < $elements->length; $i++) {
|
|
|
|
if ($elements->item($i)->getAttribute('name') == $elementName) {
|
|
|
|
$found = $elements->item($i);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($found !== FALSE) {
|
|
|
|
$authListEl = $found->getElementsByTagName('authoritative_list');
|
|
|
|
if ($authListEl->length > 0) {
|
|
|
|
$authListEl = $authListEl->item(0);
|
|
|
|
$items = $authListEl->getElementsByTagName('item');
|
|
|
|
$found = FALSE;
|
|
|
|
for ($i = 0; $found === FALSE && $i < $items->length; $i++) {
|
|
|
|
if ($items->item($i)->nodeValue == $value) {
|
|
|
|
$found=$items->item($i);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($found !== FALSE) {
|
|
|
|
if ($items->length == 1) {
|
|
|
|
$found->removeChild($authListEl);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
$authListEl->removeChild($found);
|
|
|
|
}
|
|
|
|
|
|
|
|
$ret = TRUE;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return $ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Adds an authority list item to a form element.
|
|
|
|
@param String $elementName
|
|
|
|
@param String $value
|
|
|
|
@param String $label (optional)
|
|
|
|
@return boolean $success
|
|
|
|
*/
|
|
|
|
public function addAuthListItem($elementName, $value, $label = '') {
|
|
|
|
$ret = FALSE;
|
|
|
|
if ($this->validate()) {
|
|
|
|
$elements = $this->xml->getElementsbyTagName('ingest_form')->item(0)->getElementsByTagName('form_elements')->item(0)->getElementsByTagName('element');
|
|
|
|
$found = FALSE;
|
|
|
|
for ($i = 0; $found === FALSE && $i < $elements->length; $i++) {
|
|
|
|
if ($elements->item($i)->getAttribute('name') == $elementName) {
|
|
|
|
$found = $elements->item($i);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($found !== FALSE) {
|
|
|
|
$authListEl = $found->getElementsByTagName('authoritative_list');
|
|
|
|
if ($authListEl->length == 0) {
|
|
|
|
$authListEl = $this->xml->createElement('authoritative_list');
|
|
|
|
$found->appendChild($authListEl);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
$authListEl = $authListEl->item(0);
|
|
|
|
}
|
|
|
|
|
|
|
|
$items = $authListEl->getElementsByTagName('item');
|
|
|
|
$found = FALSE;
|
|
|
|
for ($i = 0; $found == FALSE && $i < $items->length; $i++) {
|
|
|
|
if ($items->item($i)->nodeValue == $value) {
|
|
|
|
$found = TRUE;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!$found) {
|
|
|
|
$itemEl = $this->xml->createElement('item', trim($value));
|
|
|
|
if (trim($label) != '' && trim($label) != trim($value)) {
|
|
|
|
$itemEl->setAttribute('field', trim($label));
|
|
|
|
}
|
|
|
|
$authListEl->appendChild($itemEl);
|
|
|
|
$ret = TRUE;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
return $ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Builds an ingest form using the method specified in <form_builder_method> element of <ingest_form>
|
|
|
|
* Returns FALSE on failure.
|
|
|
|
*
|
|
|
|
* @param &$form
|
|
|
|
* @param &$form_state
|
|
|
|
* @return string identifier
|
|
|
|
*/
|
|
|
|
public function buildIngestForm(&$form, &$form_state) {
|
|
|
|
$ret = FALSE;
|
|
|
|
if ($this->validate()) {
|
|
|
|
$docRoot = $_SERVER['DOCUMENT_ROOT'];
|
|
|
|
$file = (isset($form_state['values']['ingest-file-location']) ? $form_state['values']['ingest-file-location'] : '');
|
|
|
|
|
|
|
|
$fullpath = $file;
|
|
|
|
|
|
|
|
$form['step'] = array(
|
|
|
|
'#type' => 'hidden',
|
|
|
|
'#value' => (isset($form_state['values']['step']) ? $form_state['values']['step'] : 0) + 1,
|
|
|
|
);
|
|
|
|
$form['ingest-file-location'] = array(
|
|
|
|
'#type' => 'hidden',
|
|
|
|
'#value' => $file,
|
|
|
|
);
|
|
|
|
$form['content_model_name'] = array(
|
|
|
|
'#type' => 'hidden',
|
|
|
|
'#value' => 'ISLANDORACM',
|
|
|
|
);
|
|
|
|
$form['models'] = array( //content models available
|
|
|
|
'#type' => 'hidden',
|
|
|
|
'#value' => $form_state['values']['models'],
|
|
|
|
);
|
|
|
|
$form['fullpath'] = array(
|
|
|
|
'#type' => 'hidden',
|
|
|
|
'#value' => $fullpath,
|
|
|
|
);
|
|
|
|
|
|
|
|
$form['#attributes']['enctype'] = 'multipart/form-data';
|
|
|
|
$form['indicator']['ingest-file-location'] = array(
|
|
|
|
'#type' => 'file',
|
|
|
|
'#title' => t('Upload Document'),
|
|
|
|
'#size' => 48,
|
|
|
|
'#description' => t('Full text'),
|
|
|
|
);
|
|
|
|
|
|
|
|
$ingest_form = $this->xml->getElementsByTagName('ingest_form')->item(0);
|
|
|
|
|
|
|
|
if (!empty($ingest_form)) {
|
|
|
|
if (strtolower($ingest_form->getAttribute('hide_file_chooser')) == 'true') {
|
|
|
|
$form['indicator']['ingest-file-location']['#type'] = 'hidden';
|
|
|
|
}
|
|
|
|
}
|
|
|
|
$dsid = $ingest_form->getAttribute('dsid');
|
|
|
|
|
|
|
|
$method=$ingest_form->getElementsByTagName('form_builder_method')->item(0);
|
|
|
|
$module = $method->getAttribute('module');
|
|
|
|
$path=drupal_get_path('module', !empty($module) ? $module : 'fedora_repository') . '/' . $method->getAttribute('file');
|
|
|
|
if (!file_exists($path)) {
|
|
|
|
self::$errors[]='Build Ingest Form: file \''. $path .'\' does not exist.';
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
@require_once($path);
|
|
|
|
$className=$method->getAttribute('class');
|
|
|
|
$methodName=($method->getAttribute('method'));
|
|
|
|
if (!class_exists($className)) {
|
|
|
|
self::$errors[] = 'Build Ingest Form: class \''. $className .' does not exist.';
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
$class = new $className;
|
|
|
|
$elements_array=$this->getIngestFormElements();
|
|
|
|
if (method_exists($class, $methodName)) {
|
|
|
|
$ret = $class->$methodName ($form, $elements_array, $form_state);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
self::$errors[] = 'Build Ingest Form: method \''. $className .'->'. $methodName .'\' does not exist.';
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return $ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Builds an edit metadata form using the method specified in the <edit_metadata_method> element
|
|
|
|
= * The DSID specified must match the DSID attribute of <edit_metadata_method>. Returns FALSE on failure.
|
|
|
|
*
|
|
|
|
* @param string $dsid
|
|
|
|
* @return $form
|
|
|
|
*/
|
|
|
|
public function buildEditMetadataForm($pid, $dsid) {
|
|
|
|
$ret = FALSE;
|
|
|
|
if (self::validDsid($dsid) && $this->validate()) {
|
|
|
|
$method = $this->xml->getElementsByTagName('edit_metadata_method');
|
|
|
|
if ($method->length > 0 && $method->item(0)->getAttribute('dsid') == $dsid) {
|
|
|
|
$method = $method->item(0);
|
|
|
|
$module = $method->getAttribute('module');
|
|
|
|
$path = drupal_get_path('module', !empty($module) ? $module : 'fedora_repository') . '/' . $method->getAttribute('file') ;
|
|
|
|
if (!file_exists($path)) {
|
|
|
|
self::$errors[] = 'Build Edit Metadata Form: file \''. $path .'\' does not exist.';
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
@require_once($path );
|
|
|
|
$className=$method->getAttribute('class');
|
|
|
|
$methodName=($method->getAttribute('method'));
|
|
|
|
if (!class_exists($className)) {
|
|
|
|
self::$errors[] = 'Build Edit Metadata Form: class \''. $className .'\' does not exist.';
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
$class = new $className($pid);
|
|
|
|
if (!method_exists($class, $methodName)) {
|
|
|
|
self::$errors[] = 'Build Edit Metadata Form: method \''. $className .'->'. $methodName .'\' does not exist.';
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
$ret = $class->$methodName();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return $ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Handles the edit metadata form using the handler specified in the <edit_metadata_method> element
|
|
|
|
* Returns FALSE on failure.
|
|
|
|
*
|
|
|
|
* @param &$form_id
|
|
|
|
* @param &$form_values
|
|
|
|
* @param &$soap_client
|
|
|
|
* @return $result
|
|
|
|
*/
|
|
|
|
public function handleEditMetadataForm(&$form_id, &$form_state, &$soap_client) {
|
|
|
|
global $base_url;
|
|
|
|
$ret = FALSE;
|
|
|
|
if ($this->validate()) {
|
|
|
|
$method = $this->xml->getElementsByTagName('edit_metadata_method');
|
|
|
|
if ($method->length > 0) {
|
|
|
|
$method=$method->item(0);
|
|
|
|
$module = $method->getAttribute('module');
|
|
|
|
$path = drupal_get_path('module', !empty($module) ? $module : 'fedora_repository') . '/' . $method->getAttribute('file');
|
|
|
|
if (!file_exists($path)) {
|
|
|
|
self::$errors[] = 'Handle Edit Metadata Form: file \''. $path .'\' does not exist.';
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
@require_once($path);
|
|
|
|
$className = $method->getAttribute('class');
|
|
|
|
$methodName = ($method->getAttribute('handler'));
|
|
|
|
if (!class_exists($className)) {
|
|
|
|
self::$errors[] = 'Handle Edit Metadata Form: class \''. $className .'\' does not exist.';
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
$class = new $className($form_state['values']['pid']);
|
|
|
|
if (!method_exists($class, $methodName)) {
|
|
|
|
self::$errors[] = 'Handle Edit Metadata Form: metho \''. $className .'->'. $methodName .'\' does not exist.';
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
$ret = $class->$methodName($form_id, $form_state['values'], $soap_client);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
// Assume DC form if none is specified.
|
|
|
|
module_load_include('inc', 'fedora_repository', 'formClass');
|
|
|
|
$metaDataForm = new formClass();
|
|
|
|
$ret = $metaDataForm->updateMetaData($form_state['values']['form_id'], $form_state['values'], $soap_client);
|
|
|
|
$form_state['redirect'] = $base_url . '/fedora/repository/' . $form_state['values']['pid'];
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return $ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Gets an associative array describing the edit metadata method.
|
|
|
|
* Array has the following keys: 'file', 'class', 'method', 'handler', 'dsid'
|
|
|
|
* @return String[] $method
|
|
|
|
*/
|
|
|
|
public function getEditMetadataMethod() {
|
|
|
|
$ret = FALSE;
|
|
|
|
if ($this->validate()) {
|
|
|
|
$method=$this->xml->getElementsByTagName('content_model')->item(0)->getElementsByTagName('edit_metadata_method');
|
|
|
|
if ($method->length > 0) {
|
|
|
|
$method = $method->item(0);
|
|
|
|
$ret = array('module' => $method->getAttribute('module') == '' ? 'fedora_repository' : $method->getAttribute('module'),
|
|
|
|
'file' => $method->getAttribute('file'),
|
|
|
|
'class' => $method->getAttribute('class'),
|
|
|
|
'method' => $method->getAttribute('method'),
|
|
|
|
'handler' => $method->getAttribute('handler'),
|
|
|
|
'dsid' => $method->getAttribute('dsid')
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return $ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Removes the edit data method from the Content Model.
|
|
|
|
* @return boolean $success
|
|
|
|
*/
|
|
|
|
public function removeEditMetadataMethod() {
|
|
|
|
$ret = FALSE;
|
|
|
|
if ($this->validate()) {
|
|
|
|
$rootEl=$this->xml->getElementsByTagName('content_model')->item(0);
|
|
|
|
$method = $rootEl->getElementsByTagName('edit_metadata_method');
|
|
|
|
if ($method->length > 0) {
|
|
|
|
$rootEl->removeChild($method->item(0));
|
|
|
|
$ret = TRUE;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return $ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Update the Edit Metadata Method defined in the Content Model
|
|
|
|
* @param String $module
|
|
|
|
* @param String $file
|
|
|
|
* @param String $class
|
|
|
|
* @param String $method
|
|
|
|
* @param String $handler
|
|
|
|
* @param String $dsid
|
|
|
|
* @return boolean $success
|
|
|
|
*/
|
|
|
|
public function updateEditMetadataMethod($module, $file, $class, $method, $handler, $dsid) {
|
|
|
|
$ret = FALSE;
|
|
|
|
if (self::validDsid($dsid) && $this->validate()) {
|
|
|
|
$methodEl = $this->xml->getElementsByTagName('content_model')->item(0)->getElementsByTagName('edit_metadata_method');
|
|
|
|
if ($methodEl->length > 0) {
|
|
|
|
$methodEl=$methodEl->item(0);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
$methodEl = $this->xml->createElement('edit_metadata_method');
|
|
|
|
$this->xml->getElementsByTagName('content_model')->item(0)->appendChild($methodEl);
|
|
|
|
}
|
|
|
|
$methodEl->setAttribute('module', $module);
|
|
|
|
$methodEl->setAttribute('file', $file);
|
|
|
|
$methodEl->setAttribute('class', $class);
|
|
|
|
$methodEl->setAttribute('method', $method);
|
|
|
|
$methodEl->setAttribute('handler', $handler);
|
|
|
|
$methodEl->setAttribute('dsid', $dsid);
|
|
|
|
$ret = TRUE;
|
|
|
|
}
|
|
|
|
return $ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Executes the add datastream method for the specified datastream on the specified file.
|
|
|
|
* Returns FALSE on failure.
|
|
|
|
*
|
|
|
|
* @param string $dsid
|
|
|
|
* @param string $filen
|
|
|
|
* @return $result
|
|
|
|
*/
|
|
|
|
public function execAddDatastreamMethods($dsid, $file) {
|
|
|
|
$ret = FALSE;
|
|
|
|
if (self::validDsid($dsid) && $this->validate() && ($ds = $this->getDSModel($dsid)) !== FALSE) {
|
|
|
|
$addMethod = $ds->getElementsByTagName('add_datastream_method');
|
|
|
|
if ($addMethod->length > 0) {
|
|
|
|
$addMethod=$addMethod->item(0);
|
|
|
|
$paramArray = array();
|
|
|
|
$params= $addMethod->getElementsByTagName('parameters');
|
|
|
|
if ($params->length > 0) {
|
|
|
|
$params=$params->item(0)->getElementsByTagName('parameter');
|
|
|
|
for ($i = 0; $i < $params->length; $i++) {
|
|
|
|
$paramsArray[$params->item($i)->getAttribute('name')] = $params->item($i)->nodeValue;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
$module = $addMethod->getAttribute('module');
|
|
|
|
$path = drupal_get_path('module', !empty($module) ? $module : 'fedora_repository') . '/' . $addMethod->getAttribute('file') ;
|
|
|
|
if (!file_exists($path)) {
|
|
|
|
self::$errors[] = 'Execute Add Datastream Methods: file \''. $path .'\' does not exist.';
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
@require_once($path);
|
|
|
|
$className = $addMethod->getAttribute('class');
|
|
|
|
$methodName = $addMethod->getAttribute('method');
|
|
|
|
if (!class_exists($className)) {
|
|
|
|
self::$errors[] = 'Execute Add Datastream Methods: class \''. $className .'\' does not exist.';
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
$class = new $className;
|
|
|
|
if (!method_exists($class, $methodName)) {
|
|
|
|
self::$errors[] = 'Execute Add Datastream Methods: method \''. $className .'->'. $methodName .'\' does not exist.';
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
$ret = $class->$methodName($paramsArray, $addMethod->getAttribute('dsid'), $file, $addMethod->getAttribute('modified_files_ext'));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return $ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Executes the ingest rules that apply to the specified file/mimetype.
|
|
|
|
* Returns FALSE on failure.
|
|
|
|
*
|
|
|
|
* If $preview is TRUE, then only execute rules with
|
|
|
|
* a parameter 'preview'. Used to generate previews for the file chooser.
|
|
|
|
*
|
|
|
|
* @param string $file
|
|
|
|
* @param string $mimetype
|
|
|
|
* @param boolean $preview
|
|
|
|
* @return $result
|
|
|
|
*/
|
|
|
|
public function execIngestRules($file, $mimetype, $preview = FALSE) {
|
|
|
|
$ret = FALSE;
|
|
|
|
if ($this->validate()) {
|
|
|
|
$ret = TRUE;
|
|
|
|
$rules = $this->xml->getElementsByTagName('ingest_rules')->item(0)->getElementsByTagName('rule');
|
|
|
|
for ($i = 0; $i < $rules->length; $i++) {
|
|
|
|
$rule=$rules->item($i);
|
|
|
|
$types = $rule->getElementsbyTagName('applies_to');
|
|
|
|
$valid_types = array();
|
|
|
|
for ($j = 0; $j < $types->length; $j++) {
|
|
|
|
$valid_types[]=trim($types->item($j)->nodeValue);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (in_array($mimetype, $valid_types)) {
|
|
|
|
$methods = $rule->getElementsByTagName('ingest_methods');
|
|
|
|
if ($methods->length > 0) {
|
|
|
|
$methods = $methods->item(0)->getElementsbyTagName('ingest_method');
|
|
|
|
for ($j = 0; $j < $methods->length; $j++) {
|
|
|
|
$method=$methods->item($j);
|
|
|
|
$param_array=array();
|
|
|
|
$params=$method->getElementsByTagName('parameters');
|
|
|
|
$param_array['model_pid'] = $this->pid;
|
|
|
|
if ($params->length > 0) {
|
|
|
|
$params = $params->item(0)->getElementsByTagName('parameter');
|
|
|
|
for ($k = 0; $k < $params->length; $k++)
|
|
|
|
$param_array[$params->item($k)->getAttribute('name')]=$params->item($k)->nodeValue;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (!$preview || isset($param_array['preview'])) {
|
|
|
|
$module = $method->getAttribute('module');
|
|
|
|
$path = drupal_get_path('module', !empty($module) ? $module : 'fedora_repository') . '/' . $method->getAttribute('file') ;
|
|
|
|
|
|
|
|
if (!file_exists($path) || substr_compare($path, 'fedora_repository/', -strlen('fedora_repository/'), strlen('fedora_repository/')) === 0) {
|
|
|
|
self::$errors[] = 'Execute Ingest Rules: file \''. $path .'\' does not exist.';
|
|
|
|
$ret = FALSE;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
require_once($path);
|
|
|
|
$className=$method->getAttribute('class');
|
|
|
|
$methodName=($method->getAttribute('method'));
|
|
|
|
if (!class_exists($className)) {
|
|
|
|
self::$errors[] = 'Execute Ingest Rules: class \''. $className .'\' does not exist.';
|
|
|
|
$ret = FALSE;
|
|
|
|
}
|
|
|
|
else $class = new $className;
|
|
|
|
if (!method_exists($class, $methodName)) {
|
|
|
|
self::$errors[] = 'Execute Ingest Rules: method \''. $className .'->' . $methodName .'\' does not exist.';
|
|
|
|
$ret = FALSE;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
$status = $class->$methodName($param_array, $method->getAttribute('dsid'), $file, $method->getAttribute('modified_files_ext'));
|
|
|
|
if ($status !== TRUE) {
|
|
|
|
$ret = FALSE;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
return $ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Executes the form handler from the <form_builder_method> element of <ingest_form>.
|
|
|
|
*
|
|
|
|
* @param &$formData
|
|
|
|
* @param &$form_state
|
|
|
|
* @return boolean $success
|
|
|
|
*/
|
|
|
|
public function execFormHandler(&$data,&$form_state) {
|
|
|
|
$ret = FALSE;
|
|
|
|
if ($this->validate()) {
|
|
|
|
$method =$this->xml->getElementsByTagName('ingest_form')->item(0)->getElementsByTagName('form_builder_method')->item(0);
|
|
|
|
$module = $method->getAttribute('module');
|
|
|
|
$path=drupal_get_path('module', !empty($module) ? $module : 'fedora_repository') . '/' . $method->getAttribute('file') ;
|
|
|
|
if (!file_exists($path)) {
|
|
|
|
self::$errors[] = 'Execute Form Handler: file \''. $path .'\' does not exist.';
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
require_once($path);
|
|
|
|
$className=$method->getAttribute('class');
|
|
|
|
$methodName=($method->getAttribute('handler'));
|
|
|
|
if (!class_exists($className)) {
|
|
|
|
self::$errors[] = 'Execute Form Handler: class \''. $className .'\' does not exist.';
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
$class = new $className;
|
|
|
|
if (!method_exists($class, $methodName)) {
|
|
|
|
self::$errors[] = 'Execute Form Handler: method \''. $className .'->'. $methodName .'\' does not exist.';
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
$class->$methodName($data,$form_state);
|
|
|
|
$ret = TRUE;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return $ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Gets a list of valid mimetypes that can apply to this model.
|
|
|
|
* Returns FALSE on failure.
|
|
|
|
*
|
|
|
|
* @return string[] $mimetypes
|
|
|
|
*/
|
|
|
|
public function getMimetypes() {
|
|
|
|
//only proceed if the xml is valid.
|
|
|
|
if ($this->validate()) {
|
|
|
|
if ($this->mimes === NULL) {
|
|
|
|
$result=$this->xml->getElementsByTagName('mimetypes');
|
|
|
|
$result=$result->item(0)->getElementsByTagName('type');
|
|
|
|
$mimes = array();
|
|
|
|
for ($i = 0; $i < $result->length; $i++) {
|
|
|
|
$mimes[] = trim($result->item($i)->nodeValue);
|
|
|
|
}
|
|
|
|
$this->mimes=$mimes;
|
|
|
|
}
|
|
|
|
return $this->mimes;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Calls all defined display methods for the ContentModel.
|
|
|
|
* The PID specified is passed to the constructor of the display
|
|
|
|
* class(es) specified in the Content Model.
|
|
|
|
*
|
|
|
|
* @param string $pid
|
|
|
|
* @return string $output
|
|
|
|
*/
|
|
|
|
public function displayExtraFieldset($pid) {
|
|
|
|
$output = '';
|
|
|
|
if ($this->validate()) {
|
|
|
|
$datastreams = $this->xml->getElementsByTagName('datastreams');
|
|
|
|
if ($datastreams->length > 0) {
|
|
|
|
$datastreams = $datastreams->item(0)->getElementsByTagName('datastream');
|
|
|
|
for ($i=0; $i < $datastreams->length; $i++) {
|
|
|
|
$ds = $datastreams->item($i);
|
|
|
|
if ($ds->attributes->getNamedItem('display_in_fieldset') == NULL || strtolower($ds->getAttribute('display_in_fieldset')) != 'false' ) {
|
|
|
|
$dispMethods = $ds->getElementsByTagName('display_method');
|
|
|
|
for ($j = 0; $j < $dispMethods->length; $j++) {
|
|
|
|
$method = $dispMethods->item($j);
|
|
|
|
$module = $method->getAttribute('module');
|
|
|
|
$path=drupal_get_path('module', !empty($module) ? $module : 'fedora_repository') . '/' . $method->getAttribute('file') ;
|
|
|
|
if (!file_exists($path)) {
|
|
|
|
self::$errors[] = 'Execute Form Handler: file \''. $path .'\' does not exist.';
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
require_once($path);
|
|
|
|
$className = $method->getAttribute('class');
|
|
|
|
$methodName = ($method->getAttribute('method'));
|
|
|
|
if (!class_exists($className)) {
|
|
|
|
self::$errors[] = 'Execute Form Handler: class \''. $className .'\' does not exist.';
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
$class = new $className($pid);
|
|
|
|
if (!method_exists($class, $methodName)) {
|
|
|
|
self::$errors[] = 'Execute Form Handler: method \''. $className .'->'. $methodName .'\' does not exist.';
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
$output .= $class->$methodName();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return $output;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Gets a list of datastreams from the ContentModel
|
|
|
|
* (not including the QDC ds if it is listed).
|
|
|
|
* Returns FALSE on failure.
|
|
|
|
*
|
|
|
|
* @return string[] $datastreams
|
|
|
|
*/
|
|
|
|
public function listDatastreams() {
|
|
|
|
$ds_array=array();
|
|
|
|
if ($this->validate()) {
|
|
|
|
$datastreams = $this->xml->getElementsByTagName('datastreams');
|
|
|
|
if ($datastreams->length > 0) {
|
|
|
|
$datastreams=$datastreams->item(0)->getElementsByTagName('datastream');
|
|
|
|
for ($i=0;$i<$datastreams->length;$i++) {
|
|
|
|
$dsName=$datastreams->item($i)->getAttribute('dsid');
|
|
|
|
// if ($dsName != 'QDC')
|
|
|
|
// {
|
|
|
|
$ds_array[]=$dsName;
|
|
|
|
// }
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return $ds_array;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Adds an allowed mimetype to the model.
|
|
|
|
*
|
|
|
|
* @param String $type
|
|
|
|
* @return boolean $success
|
|
|
|
*/
|
|
|
|
public function addMimetype($type) {
|
|
|
|
$ret=FALSE;
|
|
|
|
if ($this->validate()) {
|
|
|
|
$mimetypesEl = $this->xml->getElementsByTagName('mimetypes')->item(0);
|
|
|
|
$types= $mimetypesEl->getElementsByTagName('type');
|
|
|
|
|
|
|
|
$found = FALSE;
|
|
|
|
for ($i=0;!$found && $i<$types->length;$i++) {
|
|
|
|
if ($types->item($i)->nodeValue == $type)
|
|
|
|
$found = TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!$found) {
|
|
|
|
$newTypeEl = $this->xml->createElement('type', $type);
|
|
|
|
$mimetypesEl->appendChild($newTypeEl);
|
|
|
|
$ret=TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
return $ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Removes an allowed mimetype from the model.
|
|
|
|
*
|
|
|
|
* @param String $type
|
|
|
|
* @return boolean $success
|
|
|
|
*/
|
|
|
|
public function removeMimetype($type) {
|
|
|
|
$ret=FALSE;
|
|
|
|
if ($this->validate()) {
|
|
|
|
$mimetypesEl = $this->xml->getElementsByTagName('mimetypes')->item(0);
|
|
|
|
$types= $mimetypesEl->getElementsByTagName('type');
|
|
|
|
$found=FALSE;
|
|
|
|
for ($i=0;!$found && $i<$types->length;$i++) {
|
|
|
|
if ($types->item($i)->nodeValue == $type)
|
|
|
|
$found=$types->item($i);
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($found !== FALSE && $types->length > 1) {
|
|
|
|
$mimetypesEl->removeChild($found);
|
|
|
|
$ret = TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
return $ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function getDisplayMethods($ds) {
|
|
|
|
$ret=FALSE;
|
|
|
|
if (($ds = $this->getDSModel($ds))!==FALSE) {
|
|
|
|
$ret=array();
|
|
|
|
$dispMethods= $ds->getElementsByTagName('display_method');
|
|
|
|
for ($i=0;$i<$dispMethods->length;$i++) {
|
|
|
|
$ret[] = array( 'module' => $dispMethods->item($i)->getAttribute('module')==''?'fedora_repository':$dispMethods->item($i)->getAttribute('module'),
|
|
|
|
'file' => $dispMethods->item($i)->getAttribute('file'),
|
|
|
|
'class' => $dispMethods->item($i)->getAttribute('class'),
|
|
|
|
'method' => $dispMethods->item($i)->getAttribute('method'),
|
|
|
|
'default' => ($dispMethods->item($i)->attributes->getNamedItem('default') !== NULL ? strtolower($dispMethods->item($i)->getAttribute('default')) == 'true' : FALSE));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return $ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function addDs($dsid, $display_in_fieldset = FALSE) {
|
|
|
|
$ret=FALSE;
|
|
|
|
|
|
|
|
if (self::validDsid($dsid) && ($ds = $this->getDSModel($dsid)) === FALSE) {
|
|
|
|
$datastreamsEl = $this->xml->getElementsByTagName('datastreams');
|
|
|
|
if ($datastreamsEl->length > 0) {
|
|
|
|
$datastreamsEl=$datastreamsEl->item(0);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
$datastreamsEl = $this->xml->createElement('datastreams');
|
|
|
|
$this->xml->getElementsByTagName('content_model')->item(0)->appendChild($datastreamsEl);
|
|
|
|
}
|
|
|
|
|
|
|
|
$dsEl = $this->xml->createElement('datastream');
|
|
|
|
$dsEl->setAttribute('dsid', $dsid);
|
|
|
|
if ($display_in_fieldset == TRUE) {
|
|
|
|
$dsEl->setAttribute('display_in_fieldset', 'true');
|
|
|
|
}
|
|
|
|
$datastreamsEl->appendChild($dsEl);
|
|
|
|
$ret = TRUE;
|
|
|
|
}
|
|
|
|
return $ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function removeDs($dsid) {
|
|
|
|
$ret = FALSE;
|
|
|
|
|
|
|
|
if (self::validDsid($dsid) && ($ds = $this->getDSModel($dsid)) !== FALSE) {
|
|
|
|
$datastreamsEl = $this->xml->getElementsByTagName('datastreams')->item(0);
|
|
|
|
$datastreamsEl->removeChild($ds);
|
|
|
|
$ret = TRUE;
|
|
|
|
}
|
|
|
|
return $ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function displayInFieldset($dsid) {
|
|
|
|
$ret = FALSE;
|
|
|
|
if (self::validDsid($dsid) && ($ds = $this->getDSModel($dsid)) !== FALSE) {
|
|
|
|
$ret = strtolower($ds->getAttribute('display_in_fieldset')) == 'true';
|
|
|
|
}
|
|
|
|
return $ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function setDisplayInFieldset($dsid, $value = TRUE) {
|
|
|
|
$ret = FALSE;
|
|
|
|
if (self::validDsid($dsid) && ($ds = $this->getDSModel($dsid)) !== FALSE) {
|
|
|
|
if ($value == FALSE && $ds->attributes->getNamedItem('display_in_fieldset') !== NULL) {
|
|
|
|
$ds->removeAttribute('display_in_fieldset');
|
|
|
|
$ret = TRUE;
|
|
|
|
}
|
|
|
|
elseif ($value == TRUE) {
|
|
|
|
$ds->setAttribute('display_in_fieldset', 'true');
|
|
|
|
$ret = TRUE;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return $ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function setDefaultDispMeth($dsid, $module, $file, $class, $method) {
|
|
|
|
$ret = FALSE;
|
|
|
|
|
|
|
|
if (self::validDsid($dsid) && ($ds = $this->getDSModel($dsid)) !== FALSE) {
|
|
|
|
$found = FALSE;
|
|
|
|
$dispMethods = $ds->getElementsByTagName('display_method');
|
|
|
|
for ($i = 0; !$found && $i < $dispMethods->length; $i++) {
|
|
|
|
if ($module == ($dispMethods->item($i)->getAttribute('module') == '' ? 'fedora_repository' : $dispMethods->item($i)->getAttribute('module')) &&
|
|
|
|
$file == $dispMethods->item($i)->getAttribute('file') &&
|
|
|
|
$class == $dispMethods->item($i)->getAttribute('class') &&
|
|
|
|
$method == $dispMethods->item($i)->getAttribute('method')) {
|
|
|
|
$found=$dispMethods->item($i);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($found !== FALSE) {
|
|
|
|
|
|
|
|
for ($i = 0; $i < $dispMethods->length; $i++) {
|
|
|
|
if ($dispMethods->item($i)->attributes->getNamedItem('default') !== NULL) {
|
|
|
|
$dispMethods->item($i)->removeAttribute('default');
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
$found->setAttribute('default', 'true');
|
|
|
|
$ret = TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
return $ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function removeDispMeth($dsid, $module, $file, $class, $method) {
|
|
|
|
$ret = FALSE;
|
|
|
|
if (self::validDsid($dsid) && ($ds = $this->getDSModel($dsid)) !== FALSE) {
|
|
|
|
$found = FALSE;
|
|
|
|
$dispMethods= $ds->getElementsByTagName('display_method');
|
|
|
|
for ($i=0;!$found && $i<$dispMethods->length;$i++) {
|
|
|
|
if ($module == ($dispMethods->item($i)->getAttribute('module') == '' ? 'fedora_repository' : $dispMethods->item($i)->getAttribute('module') == '') &&
|
|
|
|
$file == $dispMethods->item($i)->getAttribute('file') &&
|
|
|
|
$class == $dispMethods->item($i)->getAttribute('class') &&
|
|
|
|
$method == $dispMethods->item($i)->getAttribute('method')) {
|
|
|
|
$found=$dispMethods->item($i);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($found !== FALSE) {
|
|
|
|
$ds->removeChild($found);
|
|
|
|
$ret = TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
return $ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function addDispMeth($dsid, $module, $file, $class, $method, $default = FALSE) {
|
|
|
|
$ret=FALSE;
|
|
|
|
if (self::validDsid($dsid) && ($ds = $this->getDSModel($dsid))!==FALSE) {
|
|
|
|
$dispMethEl = $this->xml->createElement('display_method');
|
|
|
|
$dispMethEl->setAttribute('module', $module);
|
|
|
|
$dispMethEl->setAttribute('file', $file);
|
|
|
|
$dispMethEl->setAttribute('class', $class);
|
|
|
|
$dispMethEl->setAttribute('method', $method);
|
|
|
|
if ($default==TRUE) {
|
|
|
|
$dispMethEl->setAttribute('default', TRUE);
|
|
|
|
}
|
|
|
|
$ds->appendChild($dispMethEl);
|
|
|
|
$ret = TRUE;
|
|
|
|
}
|
|
|
|
return $ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function getAddDsMethod($ds) {
|
|
|
|
$ret=FALSE;
|
|
|
|
if (($ds = $this->getDSModel($ds))!==FALSE) {
|
|
|
|
$addDsMethod= $ds->getElementsByTagName('add_datastream_method');
|
|
|
|
if ($addDsMethod !== FALSE && $addDsMethod->length > 0) {
|
|
|
|
$ret = array('module' => $addDsMethod->item(0)->getAttribute('module') == '' ? 'fedora_repository' : $addDsMethod->item(0)->getAttribute('module'),
|
|
|
|
'file' => $addDsMethod->item(0)->getAttribute('file'),
|
|
|
|
'class' => $addDsMethod->item(0)->getAttribute('class'),
|
|
|
|
'method' => $addDsMethod->item(0)->getAttribute('method'),
|
|
|
|
'modified_files_ext' => $addDsMethod->item(0)->getAttribute('modified_files_ext'),
|
|
|
|
'dsid' => $addDsMethod->item(0)->getAttribute('dsid')
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return $ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function getIngestRule($rule_id) {
|
|
|
|
$ret = FALSE;
|
|
|
|
if ($this->validate()) {
|
|
|
|
$rules = $this->xml->getElementsByTagName('ingest_rules')->item(0)->getElementsByTagName('rule');
|
|
|
|
if ($rule_id < $rules->length)
|
|
|
|
$ret = $rules->item($rule_id);
|
|
|
|
}
|
|
|
|
return $ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function removeAppliesTo($rule_id, $type) {
|
|
|
|
$ret = FALSE;
|
|
|
|
if (($rule = $this->getIngestRule($rule_id)) !== FALSE) {
|
|
|
|
$applies = $rule->getElementsByTagName('applies_to');
|
|
|
|
$found = FALSE;
|
|
|
|
for ($i=0; $found === FALSE && $i < $applies->length; $i++) {
|
|
|
|
if ($type == $applies->item($i)->nodeValue) {
|
|
|
|
$found = $applies->item($i);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($found) {
|
|
|
|
$rule->removeChild($found);
|
|
|
|
$ret = TRUE;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return $ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function addAppliesTo($rule_id, $type) {
|
|
|
|
$ret=FALSE;
|
|
|
|
if (($rule = $this->getIngestRule($rule_id))!==FALSE) {
|
|
|
|
$applies = $rule->getElementsByTagName('applies_to');
|
|
|
|
$found = FALSE;
|
|
|
|
for ($i=0;!$found && $i<$applies->length;$i++) {
|
|
|
|
$found = ($type == $applies->item($i)->nodeValue);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!$found) {
|
|
|
|
$newAppliesTo = $this->xml->createElement('applies_to', $type);
|
|
|
|
$rule->insertBefore($newAppliesTo, $rule->getElementsByTagName('ingest_methods')->item(0));
|
|
|
|
$ret = TRUE;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return $ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function addIngestMethod($rule_id, $module, $file, $class, $method, $dsid, $modified_files_ext) {
|
|
|
|
$ret=FALSE;
|
|
|
|
if (self::validDsid($dsid) && ($rule=$this->getIngestRule($rule_id))!==FALSE) {
|
|
|
|
$methodsEl = $rule->getElementsByTagName('ingest_methods')->item(0);
|
|
|
|
$meth = $this->xml->createElement('ingest_method');
|
|
|
|
$meth->setAttribute('module', $module);
|
|
|
|
$meth->setAttribute('file', $file);
|
|
|
|
$meth->setAttribute('class', $class);
|
|
|
|
$meth->setAttribute('method', $method);
|
|
|
|
$meth->setAttribute('dsid', $dsid);
|
|
|
|
$meth->setAttribute('modified_files_ext', $modified_files_ext);
|
|
|
|
|
|
|
|
$methodsEl->appendChild($meth);
|
|
|
|
$ret = TRUE;
|
|
|
|
}
|
|
|
|
return $ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function removeIngestMethod($rule_id, $module, $file, $class, $method) {
|
|
|
|
$ret=FALSE;
|
|
|
|
if (($rule=$this->getIngestRule($rule_id))!==FALSE) {
|
|
|
|
$found=FALSE;
|
|
|
|
$methodsEl = $rule->getElementsByTagName('ingest_methods')->item(0);
|
|
|
|
$methods = $methodsEl->getElementsByTagName('ingest_method');
|
|
|
|
for ($i=0;!$found && $i<$methods->length;$i++) {
|
|
|
|
if ($methods->item($i)->getAttribute('module') == $module && $methods->item($i)->getAttribute('file') == $file && $methods->item($i)->getAttribute('class') == $class && $methods->item($i)->getAttribute('method') == $method) {
|
|
|
|
$found = $methods->item($i);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($found !== FALSE && $methods->length > 1) {
|
|
|
|
$methodsEl->removeChild($found);
|
|
|
|
$ret = TRUE;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return $ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function addIngestMethodParam($rule_id, $module, $file, $class, $method, $name, $value) {
|
|
|
|
$ret = FALSE;
|
|
|
|
if (($rule=$this->getIngestRule($rule_id)) !== FALSE) {
|
|
|
|
$methods = $rule->getElementsByTagName('ingest_methods')->item(0)->getElementsByTagName('ingest_method');
|
|
|
|
$found = FALSE;
|
|
|
|
for ($i = 0; $found === FALSE && $i < $methods->length; $i++) {
|
|
|
|
if (($methods->item($i)->getAttribute('module') == '' ? 'fedora_repository' : $methods->item($i)->getAttribute('module')) == $module &&
|
|
|
|
$methods->item($i)->getAttribute('file') == $file &&
|
|
|
|
$methods->item($i)->getAttribute('class') == $class &&
|
|
|
|
$methods->item($i)->getAttribute('method') == $method) {
|
|
|
|
$found=$methods->item($i);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($found !== FALSE) {
|
|
|
|
$paramsEl = $found->getElementsByTagName('parameters');
|
|
|
|
if ($paramsEl->length == 0) {
|
|
|
|
$paramsEl=$found->appendChild($this->xml->createElement('parameters'));
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
$paramsEl=$paramsEl->item(0);
|
|
|
|
}
|
|
|
|
|
|
|
|
$params = $paramsEl->getElementsByTagName('parameter');
|
|
|
|
$found = FALSE;
|
|
|
|
for ($i=0; $found === FALSE && $i < $params->length; $i++) {
|
|
|
|
if ($params->item($i)->getAttribute('name') == $name) {
|
|
|
|
$found = $params->item($i);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($found === FALSE) {
|
|
|
|
$param = $this->xml->createElement('parameter', $value);
|
|
|
|
$param->setAttribute('name', $name);
|
|
|
|
$paramsEl->appendChild($param);
|
|
|
|
$ret = TRUE;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return $ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function removeIngestMethodParam($rule_id, $module, $file, $class, $method, $name) {
|
|
|
|
$ret = FALSE;
|
|
|
|
if (($rule=$this->getIngestRule($rule_id)) !== FALSE) {
|
|
|
|
$found = FALSE;
|
|
|
|
$methodsEl = $rule->getElementsByTagName('ingest_methods')->item(0);
|
|
|
|
$methods = $methodsEl->getElementsByTagName('ingest_method');
|
|
|
|
for ($i=0; !$found && $i < $methods->length; $i++) {
|
|
|
|
if (( trim($methods->item($i)->getAttribute('module')) == $module || (trim($methods->item($i)->getAttribute('module')) == '' && $module == 'fedora_repository')) && trim($methods->item($i)->getAttribute('file')) == $file && trim($methods->item($i)->getAttribute('class')) == $class && trim($methods->item($i)->getAttribute('method')) == $method) {
|
|
|
|
$found = $methods->item($i);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if ($found !== FALSE) {
|
|
|
|
$methodEl = $found;
|
|
|
|
$paramsEl = $found->getElementsByTagName('parameters');
|
|
|
|
if ($paramsEl->length > 0) {
|
|
|
|
$paramsEl=$paramsEl->item(0);
|
|
|
|
$params = $paramsEl->getElementsByTagName('parameter');
|
|
|
|
$found = FALSE;
|
|
|
|
for ($i=0; $found === FALSE && $i < $params->length; $i++) {
|
|
|
|
if ($params->item($i)->getAttribute('name') == $name) {
|
|
|
|
$found=$params->item($i);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($found !== FALSE) {
|
|
|
|
$paramsEl->removeChild($found);
|
|
|
|
if ($params->length == 0) {
|
|
|
|
$methodEl->removeChild($paramsEl);
|
|
|
|
}
|
|
|
|
|
|
|
|
$ret = TRUE;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return $ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function removeIngestRule($rule_id) {
|
|
|
|
$ret = FALSE;
|
|
|
|
if (($rule = $this->getIngestRule($rule_id))!==FALSE) {
|
|
|
|
$ret = $this->xml->getElementsByTagName('ingest_rules')->item(0)->removeChild($rule);
|
|
|
|
}
|
|
|
|
return $ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function addIngestRule($applies_to, $module, $file, $class, $method, $dsid, $modified_files_ext) {
|
|
|
|
$ret = FALSE;
|
|
|
|
if (self::validDsid($dsid) && $this->validate()) {
|
|
|
|
$ingestRulesEl = $this->xml->getElementsByTagName('ingest_rules')->item(0);
|
|
|
|
$rule = $this->xml->createElement('rule');
|
|
|
|
$ingestMethodsEl = $this->xml->createElement('ingest_methods');
|
|
|
|
$rule->appendChild($ingestMethodsEl);
|
|
|
|
$ingestRulesEl->appendChild($rule);
|
|
|
|
$newRuleId = $ingestRulesEl->getElementsByTagName('rule')->length - 1;
|
|
|
|
$ret = ($this->addAppliesTo($newRuleId, $applies_to) && $this->addIngestMethod($newRuleId, $module, $file, $class, $method, $dsid, $modified_files_ext));
|
|
|
|
}
|
|
|
|
return $ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function getIngestRules() {
|
|
|
|
$ret = FALSE;
|
|
|
|
if ($this->validate()) {
|
|
|
|
$ret = array();
|
|
|
|
$rules = $this->xml->getElementsByTagName('ingest_rules')->item(0)->getElementsByTagName('rule');
|
|
|
|
for ($i=0; $i < $rules->length; $i++) {
|
|
|
|
$rule = array('applies_to' => array(),
|
|
|
|
'ingest_methods' => array());
|
|
|
|
$applies_to = $rules->item($i)->getElementsByTagName('applies_to');
|
|
|
|
for ($j=0; $j < $applies_to->length; $j++) {
|
|
|
|
$rule['applies_to'][] = trim($applies_to->item($j)->nodeValue);
|
|
|
|
}
|
|
|
|
|
|
|
|
$methods = $rules->item($i)->getElementsByTagName('ingest_methods')->item(0)->getElementsByTagName('ingest_method');
|
|
|
|
for ($j=0; $j < $methods->length; $j++) {
|
|
|
|
$method = array('module' => $methods->item($j)->getAttribute('module') == '' ? 'fedora_repository' : $methods->item($j)->getAttribute('module'),
|
|
|
|
'file' => $methods->item($j)->getAttribute('file'),
|
|
|
|
'class' => $methods->item($j)->getAttribute('class'),
|
|
|
|
'method' => $methods->item($j)->getAttribute('method'),
|
|
|
|
'dsid' => $methods->item($j)->getAttribute('dsid'),
|
|
|
|
'modified_files_ext' => $methods->item($j)->getAttribute('modified_files_ext'),
|
|
|
|
'parameters' => array());
|
|
|
|
|
|
|
|
$params = $methods->item($j)->getElementsByTagName('parameters');
|
|
|
|
if ($params->length > 0) {
|
|
|
|
$params=$params->item(0)->getElementsByTagName('parameter');
|
|
|
|
for ($k=0; $k < $params->length; $k++) {
|
|
|
|
$method['parameters'][$params->item($k)->getAttribute('name')] = $params->item($k)->nodeValue;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
$rule['ingest_methods'][] = $method;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
$ret[] = $rule;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return $ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function getIngestFormAttributes() {
|
|
|
|
$ret = FALSE;
|
|
|
|
if ($this->validate()) {
|
|
|
|
$ingest_formEl = $this->xml->getElementsByTagName('ingest_form')->item(0);
|
|
|
|
$ret=array('dsid' => $ingest_formEl->getAttribute('dsid'),
|
|
|
|
'page' => $ingest_formEl->getAttribute('page'),
|
|
|
|
'hide_file_chooser' => strtolower($ingest_formEl->getAttribute('hide_file_chooser')) == 'true',
|
|
|
|
'redirect' => strtolower($ingest_formEl->getAttribute('redirect')) == 'false' ? FALSE : TRUE);
|
|
|
|
|
|
|
|
}
|
|
|
|
return $ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function editIngestFormAttributes($dsid, $page, $hide_file_chooser = FALSE, $redirect = TRUE) {
|
|
|
|
$ret = FALSE;
|
|
|
|
if (self::validDsid($dsid) && $this->validate()) {
|
|
|
|
$ingest_formEl = $this->xml->getElementsByTagName('ingest_form')->item(0);
|
|
|
|
$ingest_formEl->setAttribute('dsid', $dsid);
|
|
|
|
$ingest_formEl->setAttribute('page', $page);
|
|
|
|
if (!$redirect) {
|
|
|
|
$ingest_formEl->setAttribute('redirect', 'false');
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
$ingest_formEl->removeAttribute('redirect');
|
|
|
|
}
|
|
|
|
if ($hide_file_chooser) {
|
|
|
|
$ingest_formEl->setAttribute('hide_file_chooser', 'true');
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
$ingest_formEl->removeAttribute('hide_file_chooser');
|
|
|
|
}
|
|
|
|
$ret = TRUE;
|
|
|
|
}
|
|
|
|
return $ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function getIngestFormBuilderMethod() {
|
|
|
|
$ret = FALSE;
|
|
|
|
if ($this->validate()) {
|
|
|
|
$method = $this->xml->getElementsByTagName('ingest_form')->item(0)->getElementsByTagName('form_builder_method')->item(0);
|
|
|
|
$ret = array( 'module' => ($method->getAttribute('module')==''?'fedora_repository':$method->getAttribute('module')),
|
|
|
|
'file' => $method->getAttribute('file'),
|
|
|
|
'class' => $method->getAttribute('class'),
|
|
|
|
'method' => $method->getAttribute('method'),
|
|
|
|
'handler' => $method->getAttribute('handler'));
|
|
|
|
}
|
|
|
|
return $ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function editIngestFormBuilderMethod($module, $file, $class, $method, $handler) {
|
|
|
|
$ret = FALSE;
|
|
|
|
if ($this->validate()) {
|
|
|
|
$methodEl = $this->xml->getElementsByTagName('ingest_form')->item(0)->getElementsByTagName('form_builder_method')->item(0);
|
|
|
|
$methodEl->setAttribute('module', $module);
|
|
|
|
$methodEl->setAttribute('file', $file);
|
|
|
|
$methodEl->setAttribute('class', $class);
|
|
|
|
$methodEl->setAttribute('method', $method);
|
|
|
|
$methodEl->setAttribute('handler', $handler);
|
|
|
|
$ret = TRUE;
|
|
|
|
}
|
|
|
|
return $ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
*
|
|
|
|
* @return array
|
|
|
|
* An array of form names that exist in this content model.
|
|
|
|
*/
|
|
|
|
public function getFormNames() {
|
|
|
|
if (!$this->validate()) {
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
$result = $this->xpath->query('//cm:forms/cm:form/@name'); // Select the name attribute of all forms.
|
|
|
|
for($i = 0; $i < $result->length; $i++) {
|
|
|
|
$attribute = $result->item($i);
|
|
|
|
$name = $attribute->value;
|
|
|
|
$names[$name] = $name;
|
|
|
|
}
|
|
|
|
return $names;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Removes the named form.
|
|
|
|
*
|
|
|
|
* @param string $name
|
|
|
|
* Name of the form to remove.
|
|
|
|
*
|
|
|
|
* @return boolean
|
|
|
|
* TRUE on success, FALSE otherwise.
|
|
|
|
*/
|
|
|
|
public function removeForm($name) {
|
|
|
|
$result = $this->xpath->query("//cm:form[@name='$name']");
|
|
|
|
if ($result->length == 1) {
|
|
|
|
$form = $result->item(0);
|
|
|
|
$form->parentNode->removeChild($form);
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Adds the named form.
|
|
|
|
*
|
|
|
|
* @param string $name
|
|
|
|
* Name of the form to add.
|
|
|
|
*
|
|
|
|
* @return boolean
|
|
|
|
* TRUE on success, FALSE otherwise.
|
|
|
|
*/
|
|
|
|
public function addForm($name) {
|
|
|
|
$result = $this->xpath->query("//cm:form[@name='$name']");
|
|
|
|
if ($result->length != 0) {
|
|
|
|
return FALSE; // Already Exists.
|
|
|
|
}
|
|
|
|
$result = $this->xpath->query("//cm:forms");
|
|
|
|
if ($result->length == 0) { // Forms doesn't exist
|
|
|
|
$forms = $this->xml->createElement('forms');
|
|
|
|
$form = $this->xml->createElement('form');
|
|
|
|
$form->setAttribute('name', $name);
|
|
|
|
$forms->appendChild($form);
|
|
|
|
$result = $this->xpath->query("//cm:content_model");
|
|
|
|
$result->item(0)->appendChild($forms);
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
else { // Forms exists just create form.
|
|
|
|
$form = $this->xml->createElement($name);
|
|
|
|
$form->setAttribute('name', $name);
|
|
|
|
$result->item(0)->appendChild($form);
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
*
|
|
|
|
* @param <type> $element_definition
|
|
|
|
* @param <type> $parent_element
|
|
|
|
* @return <type>
|
|
|
|
*/
|
|
|
|
public function addElementToForm($element, $parent_element) {
|
|
|
|
$element = $this->xml->importNode($element, TRUE);
|
|
|
|
$parent_element->appendChild($element);
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
*
|
|
|
|
* @param <type> $element_definition
|
|
|
|
* @param <type> $parent_element
|
|
|
|
*/
|
|
|
|
public function editFormElement($new_element, $edit_element) {
|
|
|
|
$new_element = $this->xml->importNode($new_element, TRUE);
|
|
|
|
$this->insertElementInPlace($new_element, $edit_element);
|
|
|
|
$edit_element->parentNode->removeChild($edit_element);
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
*
|
|
|
|
* @param <type> $new_element
|
|
|
|
* @param <type> $element
|
|
|
|
*/
|
|
|
|
private function insertElementInPlace($new_element, $element) {
|
|
|
|
$next = $element->nextSibling;
|
|
|
|
if ($next) {
|
|
|
|
$element->parentNode->insertBefore($new_element, $next);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
$element->parentNode->appendChild($new_element);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
*
|
|
|
|
* @param <type> $form_element
|
|
|
|
* @return <type>
|
|
|
|
*/
|
|
|
|
public function incFormElement($form_element) {
|
|
|
|
$prev = $form_element;
|
|
|
|
$name = $prev->getAttribute('name');
|
|
|
|
while ($prev = $prev->previousSibling) {
|
|
|
|
if (get_class($prev) == 'DOMElement') {
|
|
|
|
$form_element->parentNode->insertBefore($form_element, $prev);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
*
|
|
|
|
* @param <type> $form_element
|
|
|
|
* @return <type>
|
|
|
|
*/
|
|
|
|
public function decFormElement($form_element) {
|
|
|
|
$next = $form_element;
|
|
|
|
while ($next = $next->nextSibling) {
|
|
|
|
if (get_class($next) == 'DOMElement') {
|
|
|
|
$this->insertElementInPlace($form_element, $next);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|