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.
158 lines
6.7 KiB
158 lines
6.7 KiB
<?php |
|
|
|
/** |
|
* @file |
|
* This administration form for this module. |
|
*/ |
|
|
|
/** |
|
* The administration form for the fedora repository connection. |
|
* |
|
* @param array $form |
|
* The Drupal form definition. |
|
* @param array $form_state |
|
* The Drupal form state. |
|
* |
|
* @return array |
|
* The Drupal form definition. |
|
*/ |
|
function islandora_repository_admin(array $form, array &$form_state) { |
|
module_load_include('inc', 'islandora', 'includes/utilities'); |
|
drupal_add_css(drupal_get_path('module', 'islandora') . '/css/islandora.admin.css'); |
|
$url = islandora_system_settings_form_default_value('islandora_base_url', 'http://localhost:8080/fedora', $form_state); |
|
$restrict_namespaces = islandora_system_settings_form_default_value('islandora_namespace_restriction_enforced', FALSE, $form_state); |
|
$confirmation_message = islandora_admin_settings_form_repository_access_message($url); |
|
$form = array( |
|
'islandora_tabs' => array( |
|
'#type' => 'vertical_tabs', |
|
'islandora_general' => array( |
|
'#type' => 'fieldset', |
|
'#title' => t('General Configuration'), |
|
'wrapper' => array( |
|
'#prefix' => '<div id="islandora-url">', |
|
'#suffix' => '</div>', |
|
'#type' => 'markup', |
|
'islandora_base_url' => array( |
|
'#type' => 'textfield', |
|
'#title' => t('Fedora base URL'), |
|
'#default_value' => variable_get('islandora_base_url', 'http://localhost:8080/fedora'), |
|
'#description' => t('The URL to use for REST connections <br/> !confirmation_message', array( |
|
'!confirmation_message' => $confirmation_message)), |
|
'#required' => TRUE, |
|
'#ajax' => array( |
|
'callback' => 'islandora_update_url_div', |
|
'wrapper' => 'islandora-url', |
|
'effect' => 'fade', |
|
'event' => 'blur', |
|
'progress' => array('type' => 'throbber'), |
|
), |
|
), |
|
), |
|
'islandora_repository_pid' => array( |
|
'#type' => 'textfield', |
|
'#title' => t('Root Collection PID'), |
|
'#default_value' => variable_get('islandora_repository_pid', 'islandora:root'), |
|
'#description' => t('The PID of the Root Collection Object'), |
|
'#required' => TRUE, |
|
), |
|
'islandora_use_datastream_cache_headers' => array( |
|
'#type' => 'checkbox', |
|
'#title' => t('Generate/parse datastream HTTP cache headers'), |
|
'#description' => t('HTTP caching can reduce network traffic, by allowing clients to used cached copies.'), |
|
'#default_value' => variable_get('islandora_use_datastream_cache_headers', TRUE), |
|
), |
|
), |
|
'islandora_namespace' => array( |
|
'#type' => 'fieldset', |
|
'#title' => t('Namespaces'), |
|
'islandora_namespace_restriction_enforced' => array( |
|
'#type' => 'checkbox', |
|
'#title' => t('Enforce namespace restrictions'), |
|
'#description' => t("Allow administrator to restrict user's access to the PID namepaces listed below"), |
|
'#default_value' => $restrict_namespaces, |
|
), |
|
'islandora_pids_allowed' => array( |
|
'#type' => 'textarea', |
|
'#title' => t('PID namespaces allowed in this Drupal install'), |
|
'#description' => t('A list of PID namespaces, separated by spaces, that users are permitted to access from this Drupal installation. <br /> This could be more than a simple namespace, e.g. <b>demo:mydemos</b>. <br /> The namespace <b>islandora:</b> is reserved, and is always allowed.'), |
|
'#default_value' => variable_get('islandora_pids_allowed', 'default: demo: changeme: ilives: islandora-book: books: newspapers: '), |
|
'#states' => array( |
|
'invisible' => array( |
|
':input[name="islandora_namespace_restriction_enforced"]' => array('checked' => FALSE), |
|
), |
|
), |
|
), |
|
), |
|
'islandora_ds_replace_exclude' => array( |
|
'#type' => 'fieldset', |
|
'#title' => t('Excluded DSID'), |
|
'islandora_ds_replace_exclude_enforced' => array( |
|
'#type' => 'textfield', |
|
'#title' => t('Enforce DSID restrictions'), |
|
'#description' => t("A comma seperated list, allowing administrator to restrict user's access to replace a versionable datastreams latest version"), |
|
'#default_value' => variable_get('islandora_ds_replace_exclude_enforced', 'RELS-EXT,RELS-INT'), |
|
), |
|
), |
|
), |
|
); |
|
return system_settings_form($form); |
|
} |
|
|
|
/** |
|
* Gets a message which describes if the repository is accessible. |
|
* |
|
* Also describes if the user is considered an authenticated user by the |
|
* repository. |
|
* |
|
* @param string $url |
|
* The url to the Fedora Repository. |
|
* |
|
* @return string |
|
* A message describing the accessibility of the repository at the given url. |
|
*/ |
|
function islandora_admin_settings_form_repository_access_message($url) { |
|
$info = $dc = FALSE; |
|
$connection = islandora_get_tuque_connection(NULL, $url); |
|
if ($connection) { |
|
try { |
|
$info = $connection->api->a->describeRepository(); |
|
// If we are able to successfully call API-M::getDatastream, assume we are |
|
// an authenticated user, as API-M is usally locked down. |
|
$dc = $connection->api->m->getDatastream('fedora-system:ContentModel-3.0', 'DC'); |
|
} |
|
catch (RepositoryException $e) { |
|
// Ignore, we only testing to see what is accessible. |
|
} |
|
} |
|
if ($info && $dc) { |
|
$confirmation_message = theme_image(array('path' => 'misc/watchdog-ok.png', 'attributes' => array())); |
|
$confirmation_message .= t('Successfully connected to Fedora Server (Version !version).', array( |
|
'!version' => $info['repositoryVersion'])); |
|
} |
|
elseif ($info) { |
|
$confirmation_message = theme_image(array('path' => 'misc/watchdog-warning.png', 'attributes' => array())); |
|
$confirmation_message .= t('Unable to authenticate when connecting to to Fedora Server (Version !version). Please configure the !filter.', array( |
|
'!version' => $info['repositoryVersion'], '!filter' => 'Drupal Filter')); |
|
} |
|
else { |
|
$confirmation_message = theme_image(array('path' => 'misc/watchdog-error.png', 'attributes' => array())); |
|
$confirmation_message .= t('Unable to connect to Fedora server at !islandora_url', array( |
|
'!islandora_url' => $url)); |
|
} |
|
return $confirmation_message; |
|
} |
|
|
|
/** |
|
* Get the element to render for the AJAX event that triggered this callback. |
|
* |
|
* @param array $form |
|
* The Drupal form definition. |
|
* @param array $form_state |
|
* The Drupal form state. |
|
* |
|
* @return array |
|
* The form element to render. |
|
*/ |
|
function islandora_update_url_div(array $form, array $form_state) { |
|
return $form['islandora_tabs']['islandora_general']['wrapper']; |
|
}
|
|
|