You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
861 lines
32 KiB
861 lines
32 KiB
13 years ago
|
<?php
|
||
|
|
||
13 years ago
|
|
||
13 years ago
|
|
||
|
/**
|
||
|
* @file
|
||
|
* formClass class
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* form Class
|
||
|
*/
|
||
|
class formClass {
|
||
|
|
||
|
function formClass() {
|
||
|
module_load_include('inc', 'formClass', '');
|
||
|
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
|
||
|
}
|
||
|
|
||
13 years ago
|
/**
|
||
13 years ago
|
* Create the paths for urls and map them to php functions
|
||
|
* @return array
|
||
13 years ago
|
*/
|
||
|
function createMenu() {
|
||
|
$items = array();
|
||
|
|
||
13 years ago
|
$items['admin/settings/fedora_repository'] = array(
|
||
13 years ago
|
'title' => t('Islandora Configure'),
|
||
13 years ago
|
'description' => t('Enter the Islandora Collection information here'),
|
||
13 years ago
|
'page callback' => 'drupal_get_form',
|
||
13 years ago
|
'page arguments' => array('fedora_repository_admin'),
|
||
13 years ago
|
'access arguments' => array('administer site configuration'),
|
||
|
'type' => MENU_NORMAL_ITEM,
|
||
|
);
|
||
13 years ago
|
$items['admin/settings/fedora_repository/collection'] = array(
|
||
13 years ago
|
'title' => t('Collection list'),
|
||
13 years ago
|
'description' => t('Enter the Islandora collection information here.'),
|
||
13 years ago
|
'access arguments' => array('administer site configuration'),
|
||
|
'type' => MENU_DEFAULT_LOCAL_TASK,
|
||
|
'weight' => 0,
|
||
|
);
|
||
|
|
||
13 years ago
|
$items['admin/settings/fedora_repository/demoobjects'] = array(
|
||
13 years ago
|
'title' => t('Solution Packs'),
|
||
|
'description' => t('Install content models and collections required by installed solution packs.'),
|
||
13 years ago
|
'page callback' => 'fedora_repository_solution_packs_page',
|
||
13 years ago
|
'access arguments' => array('add fedora datastreams'),
|
||
13 years ago
|
'file' => 'fedora_repository.solutionpacks.inc',
|
||
13 years ago
|
'type' => MENU_LOCAL_TASK,
|
||
|
);
|
||
|
|
||
|
$items['islandoracm.xsd'] = array(
|
||
13 years ago
|
'title' => t('Islandora Content Model XML Schema Definition'),
|
||
13 years ago
|
'page callback' => 'fedora_repository_display_schema',
|
||
13 years ago
|
'page arguments' => array('islandoracm.xsd'),
|
||
|
'type' => MENU_CALLBACK,
|
||
|
'access arguments' => array('view fedora collection'),
|
||
|
);
|
||
|
|
||
|
$items['collection_policy.xsd'] = array(
|
||
13 years ago
|
'title' => t('Islandora Content Model XML Schema Definition'),
|
||
13 years ago
|
'page callback' => 'fedora_repository_display_schema',
|
||
13 years ago
|
'page arguments' => array('collection_policy.xsd'),
|
||
|
'type' => MENU_CALLBACK,
|
||
|
'access arguments' => array('view fedora collection'),
|
||
|
);
|
||
|
|
||
|
$items['fedora'] = array(
|
||
|
'page callback' => 'repository_page',
|
||
|
'type' => MENU_CALLBACK,
|
||
|
'access arguments' => array('view fedora collection'),
|
||
|
);
|
||
13 years ago
|
$repository_title = variable_get('fedora_repository_title', 'Digital repository');
|
||
13 years ago
|
if (trim($repository_title) != '') {
|
||
|
$respository_title = t($repository_title);
|
||
|
}
|
||
|
else {
|
||
|
$repository_title = NULL;
|
||
|
}
|
||
|
$items['fedora/repository'] = array(
|
||
|
'title' => $repository_title,
|
||
|
'page callback' => 'repository_page',
|
||
|
'type' => MENU_NORMAL_ITEM,
|
||
|
'access arguments' => array('view fedora collection'),
|
||
13 years ago
|
// 'access' => TRUE
|
||
13 years ago
|
);
|
||
|
|
||
|
$items['fedora/repository/service'] = array(
|
||
|
'page callback' => 'repository_service',
|
||
|
'type' => MENU_CALLBACK,
|
||
|
'access arguments' => array('view fedora collection'),
|
||
|
);
|
||
|
|
||
|
$items['fedora/repository/object_download'] = array(
|
||
|
'title' => t('Download object'),
|
||
|
'page callback' => 'fedora_object_as_attachment',
|
||
|
'type' => MENU_CALLBACK,
|
||
|
'access arguments' => array('view fedora collection')
|
||
|
);
|
||
13 years ago
|
|
||
13 years ago
|
$items['fedora/repository/editmetadata'] = array(
|
||
|
'title' => t('Edit metadata'),
|
||
13 years ago
|
'page callback' => 'fedora_repository_edit_qdc_page',
|
||
13 years ago
|
// 'page arguments' => array(1),
|
||
|
//'type' => MENU_LOCAL_TASK,
|
||
|
'type' => MENU_CALLBACK,
|
||
|
'access arguments' => array('edit fedora meta data')
|
||
|
);
|
||
13 years ago
|
|
||
13 years ago
|
$items['fedora/repository/purgeStream'] = array(
|
||
|
'title' => t('Purge data stream'),
|
||
13 years ago
|
'page callback' => 'fedora_repository_purge_stream',
|
||
13 years ago
|
'type' => MENU_CALLBACK,
|
||
|
'access arguments' => array('purge objects and datastreams')
|
||
|
);
|
||
13 years ago
|
|
||
13 years ago
|
$items['fedora/repository/replaceStream'] = array(
|
||
|
'title' => t('Replace Stream'),
|
||
13 years ago
|
'page callback' => 'fedora_repository_replace_stream',
|
||
13 years ago
|
'type' => MENU_CALLBACK,
|
||
|
'access arguments' => array('add fedora datastreams'),
|
||
|
);
|
||
13 years ago
|
|
||
13 years ago
|
$items['fedora/repository/purgeObject'] = array(
|
||
|
'title' => t('Purge object'),
|
||
13 years ago
|
'page callback' => 'fedora_repository_purge_object',
|
||
13 years ago
|
// 'type' => MENU_LOCAL_TASK,
|
||
|
'type' => MENU_CALLBACK,
|
||
|
'access arguments' => array('purge objects and datastreams')
|
||
|
);
|
||
13 years ago
|
|
||
13 years ago
|
$items['fedora/repository/addStream'] = array(
|
||
|
'title' => t('Add stream'),
|
||
|
'page callback' => 'add_stream',
|
||
|
// 'type' => MENU_LOCAL_TASK,
|
||
|
'type' => MENU_CALLBACK,
|
||
|
'access arguments' => array('add fedora datastreams')
|
||
|
);
|
||
|
|
||
|
$items['fedora/repository/collection'] = array(
|
||
|
'title' => t('Collection view'),
|
||
|
'page callback' => 'fedora_collection_view',
|
||
|
'type' => MENU_CALLBACK,
|
||
|
'access argruments' => array('view fedora collection')
|
||
|
);
|
||
13 years ago
|
|
||
13 years ago
|
//new for mnpl******************************************
|
||
|
$items['fedora/repository/mnpl_advanced_search'] = array(
|
||
|
'title' => t('Repository advanced search'),
|
||
13 years ago
|
'page callback' => 'fedora_repository_mnpl_advanced_search',
|
||
13 years ago
|
'type' => MENU_CALLBACK,
|
||
|
'access arguments' => array('view fedora collection')
|
||
|
);
|
||
13 years ago
|
|
||
13 years ago
|
$items['fedora/ingestObject'] = array(
|
||
|
'title' => t('Ingest object'),
|
||
13 years ago
|
'page callback' => 'fedora_repository_ingest_object',
|
||
13 years ago
|
'type' => MENU_CALLBACK,
|
||
|
'access arguments' => array('add fedora datastreams')
|
||
|
);
|
||
|
|
||
|
$items['fedora/repository/list_terms'] = array(
|
||
|
'title' => t('List terms'),
|
||
13 years ago
|
'page callback' => 'fedora_repository_list_terms',
|
||
13 years ago
|
'type' => MENU_CALLBACK,
|
||
|
'access arguments' => array('view fedora collection')
|
||
|
);
|
||
|
|
||
|
/* Export functionality */
|
||
|
$items['fedora/basket'] = array(
|
||
|
'title' => t('Fedora Basket'),
|
||
|
'description' => t('View and download objects added to your basket'),
|
||
13 years ago
|
'page callback' => 'fedora_repository_basket',
|
||
13 years ago
|
'access arguments' => array('view fedora collection'),
|
||
|
'type' => MENU_CALLBACK,
|
||
|
);
|
||
|
|
||
|
$items['fedora/repository/addToBasket'] = array(
|
||
13 years ago
|
'page callback' => 'fedora_repository_add_to_basket',
|
||
13 years ago
|
'type' => MENU_CALLBACK,
|
||
|
'access arguments' => array('view fedora collection'),
|
||
|
);
|
||
|
|
||
|
$items['fedora/repository/removeFromBasket'] = array(
|
||
13 years ago
|
'page callback' => 'fedora_repository_remove_from_basket',
|
||
13 years ago
|
'type' => MENU_CALLBACK,
|
||
|
'access arguments' => array('view fedora collection'),
|
||
|
);
|
||
|
|
||
|
$items['fedora/repository/add_search_results_to_basket'] = array(
|
||
13 years ago
|
'page callback' => 'fedora_repository_add_search_results_to_basket',
|
||
13 years ago
|
'type' => MENU_CALLBACK,
|
||
|
'access arguments' => array('view fedora collection'),
|
||
|
);
|
||
|
|
||
|
return $items;
|
||
|
}
|
||
|
|
||
13 years ago
|
/**
|
||
|
* Create admin form
|
||
|
* @return type
|
||
|
*/
|
||
13 years ago
|
function createAdminForm() {
|
||
|
if (!user_access('administer site configuration')) {
|
||
|
drupal_set_message(t('You must be a site administrator to edit the Fedora collecitons list.'), 'error');
|
||
|
return;
|
||
|
}
|
||
13 years ago
|
module_load_include('inc', 'fedora_repository', 'api/fedora_utils');
|
||
|
module_load_include('inc', 'fedora_repository', 'ObjectHelper');
|
||
13 years ago
|
$form = array();
|
||
13 years ago
|
$form['fedora_repository_name'] = array(
|
||
13 years ago
|
'#type' => 'textfield',
|
||
13 years ago
|
'#title' => t('Root Collection Name'),
|
||
13 years ago
|
'#default_value' => variable_get('fedora_repository_name', 'Islandora demos collection'),
|
||
13 years ago
|
'#description' => t('The Name of the Root Collection Object'),
|
||
13 years ago
|
'#required' => TRUE,
|
||
13 years ago
|
'#weight' => -20
|
||
13 years ago
|
);
|
||
13 years ago
|
$form['fedora_repository_pid'] = array(
|
||
13 years ago
|
'#type' => 'textfield',
|
||
13 years ago
|
'#title' => t('Root Collection PID'),
|
||
13 years ago
|
'#default_value' => variable_get('fedora_repository_pid', 'islandora:root'),
|
||
13 years ago
|
'#description' => t('The PID of the Root Collection Object'),
|
||
13 years ago
|
'#required' => TRUE,
|
||
13 years ago
|
'#weight' => -18
|
||
13 years ago
|
);
|
||
|
|
||
|
$form['fedora_base_url'] = array(
|
||
|
'#type' => 'textfield',
|
||
|
'#title' => t('Fedora base URL'),
|
||
|
'#default_value' => variable_get('fedora_base_url', 'http://localhost:8080/fedora'),
|
||
|
'#description' => t('The URL to use for REST-type connections'),
|
||
|
'#required' => TRUE,
|
||
13 years ago
|
'#weight' => -16,
|
||
|
);
|
||
|
|
||
|
|
||
13 years ago
|
$form['fedora_repository_url'] = array(
|
||
13 years ago
|
'#type' => 'textfield',
|
||
|
'#title' => t('Fedora RISearch URL'),
|
||
13 years ago
|
'#default_value' => variable_get('fedora_repository_url', 'http://localhost:8080/fedora/risearch'),
|
||
13 years ago
|
'#description' => t('The url of the Fedora server'), '#required' => TRUE,
|
||
|
'#weight' => -14
|
||
13 years ago
|
);
|
||
13 years ago
|
|
||
|
$form['fedora_soap_url'] = array(
|
||
|
'#type' => 'textfield',
|
||
|
'#title' => t('Fedora SOAP Url'),
|
||
|
'#default_value' => variable_get('fedora_soap_url', 'http://localhost:8080/fedora/services/access?wsdl'),
|
||
|
'#description' => t('The URL to use for SOAP connections'),
|
||
|
'#required' => TRUE,
|
||
13 years ago
|
'#weight' => -12,
|
||
13 years ago
|
'#suffix' => '<p>' . (fedora_available() ? '<img src="' . url('misc/watchdog-ok.png') . '"/>' . t('Successfully connected to Fedora server at !fedora_soap_url', array('!fedora_soap_url' => variable_get('fedora_soap_url', ''))) : '<img src="' . url('misc/watchdog-error.png') . '"/> ' . t('Unable to connect to Fedora server at !fedora_soap_url</p>', array('!fedora_soap_url' => variable_get('fedora_soap_url', '')))),
|
||
|
);
|
||
13 years ago
|
|
||
13 years ago
|
$form['fedora_soap_manage_url'] = array(
|
||
|
'#type' => 'textfield',
|
||
|
'#title' => t('Fedora SOAP management URL'),
|
||
|
'#default_value' => variable_get('fedora_soap_manage_url', 'http://localhost:8080/fedora/services/management?wsdl'), '#description' => t('The URL to use for SOAP API-M connections'),
|
||
|
'#required' => TRUE,
|
||
13 years ago
|
'#weight' => -10
|
||
13 years ago
|
);
|
||
13 years ago
|
|
||
13 years ago
|
// will allow admin user to remove namepsace restrictions if not explicitly disallowed in settings.php
|
||
|
if (variable_get('allow_open_namespace', TRUE)) {
|
||
|
$form['fedora_namespace'] = array(
|
||
|
'#type' => 'fieldset',
|
||
|
);
|
||
|
|
||
|
$form['fedora_namespace']['fedora_namespace_restriction_enforced'] = array(
|
||
|
'#weight' => -1,
|
||
|
'#type' => 'radios',
|
||
|
'#title' => t('Enforce namespace restrictions'),
|
||
|
'#options' => array(
|
||
|
TRUE => t('Enabled'),
|
||
|
FALSE => t('Disabled')
|
||
|
),
|
||
|
'#description' => t('Allow administrator to restrict user\'s access to the PID namepaces listed below'),
|
||
|
'#default_value' => variable_get('fedora_namespace_restriction_enforced', TRUE)
|
||
|
);
|
||
|
|
||
|
$form['fedora_namespace']['fedora_pids_allowed'] = array(
|
||
|
'#type' => 'textfield',
|
||
|
'#title' => t('PID namespaces allowed in this Drupal install'),
|
||
13 years ago
|
'#default_value' => variable_get('fedora_pids_allowed', 'default: demo: changeme: islandora: ilives: islandora-book: books: newspapers: '),
|
||
13 years ago
|
'#description' => t('A space separated list of PID namespaces that users are permitted to access from this Drupal installation. <br /> This could be more than a simple namespace ie demo:mydemos.'),
|
||
13 years ago
|
'#weight' => 0
|
||
|
);
|
||
|
}
|
||
|
else {
|
||
|
$form['fedora_pids_allowed'] = array(
|
||
|
'#type' => 'textfield',
|
||
|
'#title' => t('PID namespaces allowed in this Drupal install'),
|
||
13 years ago
|
'#default_value' => variable_get('fedora_pids_allowed', 'default: demo: changeme: islandora: ilives: islandora-book: books: newspapers: '),
|
||
13 years ago
|
'#description' => t('A space separated list of PID namespaces that users are permitted to access from this Drupal installation. <br /> This could be more than a simple namespace ie demo:mydemos.'),
|
||
13 years ago
|
'#weight' => 0
|
||
|
);
|
||
|
}
|
||
13 years ago
|
$form['fedora_repository_title'] = array(
|
||
13 years ago
|
'#type' => 'textfield',
|
||
13 years ago
|
'#title' => t('Digital Repository Title'),
|
||
13 years ago
|
'#default_value' => variable_get('fedora_repository_title', 'Digital Repository'),
|
||
13 years ago
|
'#description' => t('The title displayed when viewing collections and objects in /fedora/repository. Leave blank to display no title. Note that the menus must be rebuilt after changing this variable.'),
|
||
|
);
|
||
13 years ago
|
$form['advanced'] = array(
|
||
|
'#type' => 'fieldset',
|
||
13 years ago
|
'#title' => t('Advanced configuration options'),
|
||
13 years ago
|
'#description' => t('Advanced configuration. Under normal circumstances these will not be touched'),
|
||
13 years ago
|
'#collapsible' => TRUE,
|
||
|
'#collapsed' => TRUE,
|
||
13 years ago
|
);
|
||
|
$form['advanced']['fedora_object_display_title'] = array(
|
||
13 years ago
|
'#type' => 'select',
|
||
|
'#title' => t('Display Object Title Behaviour'),
|
||
|
'#default_value' => variable_get('fedora_object_display_title', ObjectHelper::$DISPLAY_ALWAYS),
|
||
|
'#options' => array(ObjectHelper::$DISPLAY_ALWAYS => t('Always'), ObjectHelper::$DISPLAY_NEVER => t('Never'), ObjectHelper::$DISPLAY_NO_MODEL_OUTPUT => t('Only if no Content Model display output.')),
|
||
|
'#description' => t('Determines when to display the object (or collection) title when viewing an object/collection page.'),
|
||
|
);
|
||
|
|
||
13 years ago
|
$form['advanced']['fedora_object_display_description'] = array(
|
||
13 years ago
|
'#type' => 'select',
|
||
|
'#title' => t('Display Object Description Behaviour'),
|
||
|
'#default_value' => variable_get('fedora_object_display_description', ObjectHelper::$DISPLAY_ALWAYS),
|
||
|
'#options' => array(ObjectHelper::$DISPLAY_ALWAYS => t('Always'), ObjectHelper::$DISPLAY_NEVER => t('Never'), ObjectHelper::$DISPLAY_NO_MODEL_OUTPUT => t('Only if no Content Model display output.')),
|
||
|
'#description' => t('Determines when to display the default object (or collection) description fieldset when viewing an object/collection page.'),
|
||
|
);
|
||
|
|
||
13 years ago
|
$form['advanced']['fedora_object_restrict_datastreams'] = array(
|
||
13 years ago
|
'#type' => 'checkbox',
|
||
|
'#title' => t('Restrict Access to Fedora Object Datastreams'),
|
||
|
'#default_value' => variable_get('fedora_object_restrict_datastreams', FALSE),
|
||
|
'#description' => t('When enabled, restricts access to fedora object datastreams that are not listed in the Islandora Content Model for the object (unless the user is an administrator).'),
|
||
|
);
|
||
|
|
||
13 years ago
|
$form['advanced']['fedora_collection_display_list'] = array(
|
||
13 years ago
|
'#type' => 'select',
|
||
|
'#title' => t('Display Collection List Behaviour'),
|
||
|
'#default_value' => variable_get('fedora_collection_display_list', ObjectHelper::$DISPLAY_ALWAYS),
|
||
|
'#options' => array(ObjectHelper::$DISPLAY_ALWAYS => t('Always'), ObjectHelper::$DISPLAY_NEVER => t('Never'), ObjectHelper::$DISPLAY_NO_MODEL_OUTPUT => t('Only if no Content Model display output.')),
|
||
|
'#description' => t('Determines when to display the list of objects when viewing a collection page.'),
|
||
|
);
|
||
|
|
||
|
//Export functionality
|
||
13 years ago
|
$form['advanced']['module']['export_area'] = array(
|
||
13 years ago
|
'#type' => 'textfield',
|
||
|
'#title' => t('Export area'),
|
||
|
'#default_value' => variable_get('export_area', file_directory_path() . '/fedora_export_area'),
|
||
|
'#description' => t("Path to the export area. It must be accessible by druapl (i.e. apache user)."),
|
||
|
'#required' => TRUE,
|
||
|
);
|
||
|
|
||
|
$form['#attributes'] = array('enctype' => "multipart/form-data");
|
||
|
|
||
|
|
||
|
return system_settings_form($form);
|
||
|
}
|
||
|
|
||
13 years ago
|
/**
|
||
|
* Update Metadata
|
||
|
* @param type $form_id
|
||
|
* @param type $form_values
|
||
|
* @param type $client
|
||
|
* @return type
|
||
|
*/
|
||
13 years ago
|
function updateMetaData($form_id, $form_values, $client) {
|
||
|
// ======================================
|
||
|
// = begin creation of foxml dom object =
|
||
|
// ======================================
|
||
|
$dom = new DomDocument("1.0", "UTF-8");
|
||
|
$dom->formatOutput = TRUE;
|
||
|
|
||
|
///begin writing qdc
|
||
|
|
||
|
$oai = $dom->createElement("oai_dc:dc");
|
||
|
$oai->setAttribute('xmlns:oai_dc', "http://www.openarchives.org/OAI/2.0/oai_dc/");
|
||
|
$oai->setAttribute('xmlns:dc', "http://purl.org/dc/elements/1.1/");
|
||
|
$oai->setAttribute('xmlns:dcterms', "http://purl.org/dc/terms/");
|
||
|
$oai->setAttribute('xmlns:xsi', "http://www.w3.org/2001/XMLSchema-instance");
|
||
|
|
||
|
// DC elements
|
||
|
$previousElement = NULL; // Used in case we have to nest elements for qualified dublin core.
|
||
|
foreach ($form_values as $key => $value) {
|
||
|
$index = strrpos($key, '-');
|
||
|
$key = substr($key, 0, $index);
|
||
|
$test = substr($key, 0, 2);
|
||
|
if ($test == 'dc' || $test == 'ap') { // Don't try to process other form values.
|
||
|
try {
|
||
|
if (!strcmp(substr($key, 0, 4), 'app_')) {
|
||
|
$key = substr($key, 4);
|
||
|
$previousElement->appendChild($dom->createElement($key, $value));
|
||
|
}
|
||
|
else {
|
||
|
$previousElement = $dom->createElement($key, $value);
|
||
|
$oai->appendChild($previousElement);
|
||
|
}
|
||
|
} catch (exception $e) {
|
||
|
drupal_set_message(t($e->getMessage()), 'error');
|
||
|
continue;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
$dom->appendChild($oai);
|
||
|
|
||
|
if (!$client) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
$pid = $form_values['pid'];
|
||
|
$dsId = $form_values['dsid'];
|
||
|
$params = array(
|
||
|
"pid" => $pid,
|
||
|
"dsID" => $dsId,
|
||
|
"altIDs" => "",
|
||
|
"dsLabel" => "Qualified Dublin Core",
|
||
|
"MIMEType" => "text/xml",
|
||
|
"formatURI" => "URL",
|
||
|
"dsContent" => $dom->saveXML(), "checksumType" => "DISABLED", "checksum" => "none",
|
||
|
"logMessage" => "datastream_modified", "force" => "TRUE");
|
||
|
try {
|
||
|
$object = $client->__soapCall('ModifyDatastreamByValue', array($params));
|
||
|
} catch (exception $e) {
|
||
|
drupal_set_message(t("Error updating metadata") . " " . $e->getMessage(), 'error');
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* queries the collection object for a childsecurity datastream and if found parses it
|
||
|
* to determine if this user is allowed to ingest in this collection
|
||
13 years ago
|
* we assume if they are able to modify objects in the collection they can ingest as well.
|
||
|
* @param type $collection_pid
|
||
|
* @return type
|
||
|
*/
|
||
13 years ago
|
function can_ingest_here($collection_pid) {
|
||
13 years ago
|
module_load_include('inc', 'fedora_repository', 'SecurityClass');
|
||
13 years ago
|
$securityClass = new SecurityClass();
|
||
|
return $securityClass->canIngestHere($collection_pid);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Drupal's permissions at this point no xacml yet. xacml decisions are made by fedora
|
||
|
* @param type $collection_pid
|
||
|
* @return type
|
||
|
*/
|
||
|
function canShowIngestForm($collection_pid) {
|
||
|
if (!user_access('ingest new fedora objects')) {
|
||
|
drupal_set_message(t('You do not have permission to ingest.'), 'error');
|
||
|
return FALSE;
|
||
|
}
|
||
13 years ago
|
module_load_include('inc', 'fedora_repository', 'SecurityClass');
|
||
13 years ago
|
$security_class = new SecurityClass();
|
||
|
if (!$security_class->canIngestHere($collection_pid)) {
|
||
|
// Queries the collection object for a child security datastream and if found parses it
|
||
|
// to determine if this user is allowed to ingest in this collection
|
||
|
// we assume if they are able to modify objects in the collection they can ingest as well.
|
||
|
drupal_set_message(t('You do not have premission to ingest here.'));
|
||
|
return FALSE;
|
||
|
}
|
||
|
if ($collection_pid == NULL) {
|
||
|
drupal_set_message(t('You must specify an collection object pid to ingest an object.'), 'error');
|
||
|
return FALSE;
|
||
|
}
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Creates the first page of the ingest form for editing QDC.
|
||
|
*
|
||
|
* @param string $collection_pid
|
||
|
* @param string $collection_label
|
||
|
* @param array $form_state
|
||
|
*
|
||
|
* @return array
|
||
|
*/
|
||
|
function createQDCIngestFormPageOne($collection_pid, $collection_label, array &$form_state) {
|
||
|
if (($collection_policy = CollectionPolicy::loadFromCollection($collection_pid)) === FALSE) {
|
||
|
drupal_set_message(t('Unable to load collection policy \'' . $collection_pid . '\'.'));
|
||
|
return FALSE;
|
||
|
}
|
||
|
if (!($content_models = $collection_policy->getContentModels())) {
|
||
|
drupal_set_message(t('No content models associated with this collection: !collection_label. Please contact your administrator.', array('!collection_label' => $collection_label)), 'error');
|
||
|
return FALSE;
|
||
|
}
|
||
|
$potential_models = array();
|
||
|
foreach ($content_models as $content_model) {
|
||
|
$identifier = $content_model->getIdentifier();
|
||
|
$name = $content_model->name;
|
||
|
$potential_models["$identifier"] = "$name";
|
||
|
}
|
||
|
$identifier = key($potential_models);
|
||
|
$selected_model = isset($form_state['values']['models']) ? $form_state['values']['models'] : $identifier;
|
||
|
return array(
|
||
|
'indicator' => array(
|
||
|
'#type' => 'fieldset',
|
||
|
'#title' => t('Ingest digital object into collection_pid !collection_label Step #1', array('collection_pid' => $collection_pid, '!collection_label' => $collection_label)),
|
||
|
'models' => array(
|
||
|
'#type' => 'select',
|
||
|
'#title' => t('Content models available'),
|
||
|
'#options' => $potential_models,
|
||
|
'#default_value' => $selected_model,
|
||
|
'#description' => t('Content models define datastream composition, relationships between this and other content models, and the mandatory behaviors associated with each digital object.<br /> Additional information may be found <a href="https://wiki.duraspace.org/display/FEDORACREATE/Content+Models+Overview">here.</a> '),
|
||
|
),
|
||
|
),
|
||
|
'collection_pid' => array(
|
||
|
'#type' => 'hidden',
|
||
|
'#value' => $collection_pid
|
||
|
),
|
||
|
'submit' => array(
|
||
|
'#type' => 'submit',
|
||
13 years ago
|
'#submit' => array('fedora_repository_ingest_form_submit'),
|
||
13 years ago
|
'#value' => t('Next')
|
||
|
),
|
||
|
);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Create the second page of the ingest form for editing QDC
|
||
|
*
|
||
|
* @param string $collection_pid
|
||
|
* @param string $collection_label
|
||
|
* @param array $form_state
|
||
|
*
|
||
|
* @return array
|
||
|
*/
|
||
|
function createQDCIngestFormPageTwo($collection_pid, $collection_label, array &$form_state) {
|
||
13 years ago
|
module_load_include('inc', 'fedora_repository', 'ContentModel');
|
||
13 years ago
|
$form = array();
|
||
|
$content_model_pid = ContentModel::getPidFromIdentifier($form_state['values']['models']);
|
||
|
$content_model_dsid = ContentModel::getDSIDFromIdentifier($form_state['values']['models']);
|
||
|
if (($content_model = ContentModel::loadFromModel($content_model_pid, $content_model_dsid)) !== FALSE) {
|
||
|
$form = $content_model->buildIngestForm($form, $form_state);
|
||
|
if ($form === FALSE) {
|
||
|
drupal_set_message(t("Error Building Ingest Form."), 'error');
|
||
|
foreach (ContentModel::$errors as $error) {
|
||
|
drupal_set_message($error, 'error');
|
||
|
}
|
||
|
}
|
||
|
$form['collection_pid'] = array(
|
||
|
'#type' => 'hidden',
|
||
|
'#value' => $collection_pid
|
||
|
);
|
||
|
$form['submit'] = array(
|
||
|
'#type' => 'submit',
|
||
13 years ago
|
'#submit' => array('fedora_repository_ingest_form_submit'),
|
||
13 years ago
|
'#value' => t('Ingest')
|
||
|
);
|
||
|
}
|
||
|
return $form;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Create the QDC Ingest Form.
|
||
|
*
|
||
|
* @param type $collection_pid
|
||
|
* @param type $collection_label
|
||
|
* @param array $form_state
|
||
|
*
|
||
|
* @return array
|
||
|
*/
|
||
|
function createQDCIngestForm($collection_pid, $collection_label, array &$form_state) {
|
||
13 years ago
|
module_load_include('inc', 'fedora_repository', 'CollectionPolicy');
|
||
13 years ago
|
$form_state['storage']['step'] = empty($form_state['storage']['step']) ? 1 : $form_state['storage']['step'];
|
||
|
if ($form_state['storage']['step'] == 1) {
|
||
|
return $this->createQDCIngestFormPageOne($collection_pid, $collection_label, $form_state);
|
||
|
}
|
||
|
else {
|
||
|
return $this->createQDCIngestFormPageTwo($collection_pid, $collection_label, $form_state);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Create a multi step form (wizard) for ingesting objects into Fedora
|
||
|
*
|
||
|
* @param string $collection_pid
|
||
|
* @param string $collection_label
|
||
|
* @param array $form_state
|
||
|
*
|
||
|
* @return array
|
||
|
*/
|
||
|
function createIngestForm($collection_pid, $collection_label, array &$form_state) {
|
||
|
if (!$this->canShowIngestForm($collection_pid)) {
|
||
|
return FALSE;
|
||
|
}
|
||
|
if (module_exists('islandora_content_model_forms')) {
|
||
|
module_load_include('inc', 'islandora_content_model_forms', 'IngestObjectMetadataForm');
|
||
|
try {
|
||
|
$form = new IngestObjectMetadataForm();
|
||
|
return $form->create($collection_pid, $collection_label, $form_state);
|
||
|
} catch (Exception $e) {
|
||
13 years ago
|
$form_state['storage']['xml'] = FALSE; // An error occured revert back to the QDC Form.
|
||
13 years ago
|
}
|
||
|
}
|
||
|
return $this->createQDCIngestForm($collection_pid, $collection_label, $form_state);
|
||
|
}
|
||
|
|
||
13 years ago
|
/**
|
||
|
* this function may not be being used
|
||
|
* @param type $pid
|
||
|
* @param type $form_state
|
||
|
* @return string
|
||
|
*/
|
||
13 years ago
|
function createAddDataStreamForm($pid, &$form_state) {
|
||
|
//dump_vars($form_state);
|
||
|
// Populate the list of datastream IDs.
|
||
|
|
||
13 years ago
|
module_load_include('inc', 'fedora_repository', 'ObjectHelper');
|
||
|
module_load_include('inc', 'fedora_repository', 'ContentModel');
|
||
|
module_load_include('inc', 'fedora_repository', 'api/fedora_item');
|
||
13 years ago
|
|
||
|
$obj_helper = new ObjectHelper();
|
||
|
$content_models = $obj_helper->get_content_models_list($pid);
|
||
|
$available_dsids = array();
|
||
|
if (!empty($content_models)) {
|
||
|
foreach ($content_models as $content_model) {
|
||
|
|
||
|
|
||
|
$newElements = $content_model->listDatastreams();
|
||
|
if (!empty($newElements)) {
|
||
|
$available_dsids = array_merge($available_dsids, $newElements);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
$item = new Fedora_Item($pid);
|
||
|
$used_datastreams = $item->get_datastreams_list_as_SimpleXML();
|
||
|
$used_datastream_ids = array();
|
||
|
foreach ($used_datastreams->datastreamDef as $used_datastream) {
|
||
|
array_push($used_datastream_ids, $used_datastream->ID);
|
||
|
}
|
||
|
$unused_dsids = array();
|
||
|
|
||
|
if ($form_state['submitted'] && $form_state['clicked_button']['#value'] != 'OK') {
|
||
|
$form['add_datastream_label'] = array(
|
||
|
'#value' => t('<br /><h3>The datastream has been uploaded.</h3>'),
|
||
|
'#weight' => -10,
|
||
|
);
|
||
|
$form['#redirect'] = "fedora/repository/$pid/";
|
||
|
$form['submit'] = array(
|
||
|
'#type' => 'submit',
|
||
|
'#value' => t('OK')
|
||
|
);
|
||
|
return $form;
|
||
|
}
|
||
|
if (!empty($available_dsids)) {
|
||
|
$unused_dsids = array_diff($available_dsids, $used_datastream_ids);
|
||
|
if (empty($unused_dsids)) {
|
||
|
return;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
$form['add_datastream_label'] = array(
|
||
|
'#value' => t('<br /><h3>Add Datastream:</h3>'),
|
||
|
'#weight' => -10,
|
||
|
);
|
||
|
|
||
|
$form['pid'] = array(
|
||
|
'#type' => 'hidden',
|
||
|
'#value' => "$pid"
|
||
|
);
|
||
|
|
||
|
$form['stream_label'] = array(
|
||
|
'#title' => 'Datastream Label',
|
||
|
'#required' => 'TRUE',
|
||
|
'#description' => t('A Human readable label'),
|
||
|
'#type' => 'textfield'
|
||
|
);
|
||
|
|
||
|
$form['#attributes']['enctype'] = 'multipart/form-data';
|
||
|
$form['add-stream-file-location'] = array(
|
||
|
'#type' => 'file',
|
||
|
'#title' => t('Upload Document'),
|
||
|
'#size' => 48,
|
||
|
// '#required'=>'TRUE',
|
||
|
'#description' => t('The file to upload.')
|
||
|
);
|
||
|
$form['#redirect'] = "fedora/repository/$pid/";
|
||
|
$form['submit'] = array(
|
||
|
'#type' => 'submit',
|
||
|
'#value' => t('Add Datastream')
|
||
|
);
|
||
|
|
||
|
if (!empty($unused_dsids)) {
|
||
|
$dsidsForForm = array();
|
||
|
foreach ($unused_dsids as $dsid) {
|
||
|
$dsidsForForm[$dsid] = $dsid;
|
||
|
}
|
||
|
$form['stream_id'] = array(
|
||
|
'#type' => 'select',
|
||
|
'#title' => t('Datastream ID'),
|
||
|
'#default_value' => variable_get('feed_item_length', 'teaser'),
|
||
|
'#weight' => '-1',
|
||
|
'#description' => t('Datastream IDs defined by the content model.'),
|
||
|
);
|
||
|
$form['stream_id']['#options'] = array_combine($unused_dsids, $unused_dsids);
|
||
|
}
|
||
|
else {
|
||
|
$form['stream_id'] = array(
|
||
|
'#title' => 'Datastream ID',
|
||
|
'#required' => 'TRUE',
|
||
|
'#description' => t('An ID for this stream that is unique to this object. Must start with a letter and contain only alphanumeric characters and dashes and underscores.'),
|
||
|
'#type' => 'textfield',
|
||
|
'#weight' => -1,
|
||
|
);
|
||
|
}
|
||
|
return $form;
|
||
|
}
|
||
|
|
||
|
/**
|
||
13 years ago
|
* Create QDC Edit form.
|
||
13 years ago
|
*
|
||
|
* @param string $pid
|
||
|
* @param string $dsid
|
||
|
* @param object $client
|
||
|
* @param array $form_state
|
||
|
*
|
||
|
* @return string
|
||
|
*/
|
||
|
function createQDCEditForm($pid, $dsid, $client, &$form_state) {
|
||
|
$dsid = empty($dsid) ? 'QDC' : $dsid;
|
||
|
try {
|
||
|
$params = array('pid' => "$pid", 'dsID' => "$dsid", 'asOfDateTime' => "");
|
||
|
$object = $client->__soapCall('getDatastreamDissemination', array('parameters' => $params));
|
||
|
} catch (Exception $e) {
|
||
|
return array();
|
||
|
}
|
||
|
$content = $object->dissemination->stream;
|
||
|
$content = trim($content);
|
||
|
$doc = new DOMDocument();
|
||
|
if (!$doc->loadXML($content)) {
|
||
|
echo "error loading xml";
|
||
|
}
|
||
|
$oai_dc = $doc->getElementsByTagName('dc');
|
||
|
$dcItems = $oai_dc->item(0)->getElementsByTagName('*');
|
||
|
$form = array();
|
||
|
for ($i = 0; $i < $dcItems->length; $i++) {
|
||
|
$name = $dcItems->item($i)->nodeName;
|
||
|
if ($name == 'dc:description') {
|
||
|
$form["$name" . '-' . "$i"] = array(
|
||
|
'#title' => $name,
|
||
|
'#type' => 'textarea',
|
||
|
'#default_value' => $dcItems->item($i)->nodeValue,
|
||
|
'#description' => 'Dublin Core ' . substr($dcItems->item($i)->nodeName, 3)
|
||
|
);
|
||
|
}
|
||
|
elseif ($name == 'dc:title') {
|
||
|
$form["$name" . '-' . "$i"] = array(
|
||
|
'#title' => $name,
|
||
|
'#type' => 'textfield',
|
||
|
'#required' => 'TRUE',
|
||
|
'#default_value' => $dcItems->item($i)->nodeValue,
|
||
|
'#description' => 'Dublin Core ' . substr($dcItems->item($i)->nodeName, 3)
|
||
|
);
|
||
|
}
|
||
|
else {
|
||
|
if ($oai_dc->item(0)->nodeName != $dcItems->item($i)->parentNode->nodeName) {
|
||
|
$description = strstr($name, ':');
|
||
|
$form['app_' . "$name" . '-' . "$i"] = array(
|
||
|
'#title' => $name,
|
||
|
'#type' => 'textfield',
|
||
|
'#default_value' => $dcItems->item($i)->nodeValue,
|
||
|
'#description' => 'Dublin Core ' . substr($description, 1)
|
||
|
);
|
||
|
}
|
||
|
else {
|
||
|
$field_type = 'textfield';
|
||
|
$value = $dcItems->item($i)->nodeValue;
|
||
|
if ($name == 'dc:coverage') {
|
||
|
$value = '';
|
||
|
}
|
||
|
if ($name == 'dc:rights') {
|
||
|
$field_type = 'textarea';
|
||
|
}
|
||
|
$description = strstr($name, ':');
|
||
|
$form["$name" . '-' . "$i"] = array(
|
||
|
'#title' => $name,
|
||
|
'#type' => $field_type,
|
||
|
'#default_value' => $value,
|
||
|
'#description' => 'Dublin Core ' . substr($description, 1)
|
||
|
);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
$form['pid'] = array(
|
||
|
'#type' => 'hidden',
|
||
|
'#value' => "$pid"
|
||
|
);
|
||
|
$form['dsid'] = array(
|
||
|
'#type' => 'hidden',
|
||
|
'#value' => "$dsid"
|
||
|
);
|
||
|
$form['submit'] = array(
|
||
|
'#type' => 'submit',
|
||
|
'#value' => t('Update Metadata'),
|
||
|
);
|
||
|
return $form;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Creates a drupal form to edit either the QDC or DC datastream
|
||
13 years ago
|
* @param type $pid
|
||
|
* @param type $dsid
|
||
|
* @param type $client
|
||
|
* @param boolean $form_state
|
||
|
* @return type
|
||
13 years ago
|
*/
|
||
|
function createMetaDataForm($pid, $dsid, $client, &$form_state) {
|
||
|
if (module_exists('islandora_content_model_forms')) {
|
||
|
module_load_include('inc', 'islandora_content_model_forms', 'EditObjectMetadataForm');
|
||
|
try {
|
||
|
$form = new EditObjectMetadataForm($form_state);
|
||
|
return $form->create($pid, $client, $form_state);
|
||
|
} catch (Exception $e) {
|
||
13 years ago
|
$form_state['storage']['xml'] = FALSE; // An error occured revert back to the QDC Form.
|
||
13 years ago
|
}
|
||
|
}
|
||
|
return $this->createQDCEditForm($pid, $dsid, $client, $form_state);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Creates a form for replacing datastream
|
||
13 years ago
|
* @param type $pid
|
||
|
* @param type $dsId
|
||
|
* @param type $dsLabel
|
||
|
* @param type $form_state
|
||
|
* @return type
|
||
13 years ago
|
*/
|
||
|
function createReplaceDataStreamForm($pid, $dsId, $dsLabel, &$form_state) {
|
||
|
$form = array();
|
||
|
|
||
|
$form['#attributes']['enctype'] = 'multipart/form-data';
|
||
|
$form['file'] = array(
|
||
|
'#type' => 'file',
|
||
|
'#title' => t('Upload Document'),
|
||
|
'#description' => t('The file to upload.')
|
||
|
);
|
||
|
|
||
|
$form['pid'] = array(
|
||
|
'#type' => 'value',
|
||
|
'#value' => $pid,
|
||
|
);
|
||
|
|
||
|
$form['dsId'] = array(
|
||
|
'#type' => 'value',
|
||
|
'#value' => $dsId,
|
||
|
);
|
||
|
|
||
|
$form['dsLabel'] = array(
|
||
|
'#type' => 'value',
|
||
|
'#value' => $dsLabel,
|
||
|
);
|
||
|
|
||
|
$form['submit'] = array(
|
||
|
'#type' => 'submit',
|
||
|
'#value' => t('Replace Datastream')
|
||
|
);
|
||
|
|
||
|
return $form;
|
||
|
}
|
||
|
|
||
13 years ago
|
}
|