9 changed files with 671 additions and 7 deletions
@ -0,0 +1,335 @@
|
||||
<?php |
||||
|
||||
/** |
||||
* @file |
||||
* Image server central configuration. |
||||
*/ |
||||
|
||||
/** |
||||
* Image server configuration form. |
||||
* |
||||
* @param array $form |
||||
* Drupal form. |
||||
* @param array $form_state |
||||
* Drupal form state. |
||||
* |
||||
* @return array |
||||
* Drupal form. |
||||
* |
||||
* @throws \Exception |
||||
* Thrown by theme() function. |
||||
*/ |
||||
function islandora_imageserver_admin_form(array $form, array &$form_state) { |
||||
form_load_include($form_state, 'inc', 'islandora', 'includes/utilities'); |
||||
$settings = islandora_imageserver_get_settings(); |
||||
|
||||
$form = array( |
||||
'type' => islandora_imageserver_get_type_selectbox(FALSE), |
||||
'url' => array( |
||||
'#prefix' => '<div id="islandora-imageserver-path-wrapper">', |
||||
'#suffix' => '</div>', |
||||
'#type' => 'textfield', |
||||
'#title' => t('Image Server Base URL'), |
||||
'#title_display' => 'invisible', |
||||
'#default_value' => $settings['url'], |
||||
'#description' => t('The location of the image server. <br/> !confirmation_message', array( |
||||
'!confirmation_message' => islandora_imageserver_admin_form_access_message($form_state), |
||||
)), |
||||
'#ajax' => array( |
||||
'callback' => 'islandora_imageserver_admin_ajax_url', |
||||
'wrapper' => 'islandora-imageserver-path-wrapper', |
||||
), |
||||
), |
||||
'iiif' => array( |
||||
'#type' => 'fieldset', |
||||
'#title' => t('IIIF Image Server Settings'), |
||||
'#description' => t('Settings for IIIF Image Server'), |
||||
'#states' => array( |
||||
'visible' => array( |
||||
':input[name="type"]' => array('value' => 'iiif'), |
||||
), |
||||
), |
||||
'iiif_token_header' => array( |
||||
'#type' => 'checkbox', |
||||
'#title' => t('Add token as header'), |
||||
'#default_value' => $settings['iiif_token_header'], |
||||
'#description' => t('Instead of sending the token as a query parameter, it will be sent in the X-ISLANDORA-TOKEN header.'), |
||||
), |
||||
'iiif_identifier' => array( |
||||
'#type' => 'textfield', |
||||
'#title' => t('IIIF Identifier'), |
||||
'#default_value' => $settings['iiif_identifier'], |
||||
'#element_validate' => array('token_element_validate'), |
||||
'#token_types' => array('islandora'), |
||||
), |
||||
'islandora_imageserver_iiif_token_tree' => array( |
||||
'#type' => 'fieldset', |
||||
'#title' => t('Replacement patterns'), |
||||
'#collapsible' => TRUE, |
||||
'#collapsed' => TRUE, |
||||
'#description' => theme('token_tree', array( |
||||
'token_types' => array('islandora'), |
||||
'global_types' => FALSE, |
||||
)), |
||||
), |
||||
), |
||||
'actions' => array( |
||||
'#type' => 'actions', |
||||
'save' => array( |
||||
'#type' => 'submit', |
||||
'#value' => t('Save configuration'), |
||||
'#weight' => 0, |
||||
), |
||||
'reset' => array( |
||||
'#type' => 'submit', |
||||
'#value' => t('Reset to defaults'), |
||||
'#weight' => 1, |
||||
'#submit' => array('islandora_imageserver_admin_submit_reset'), |
||||
), |
||||
), |
||||
); |
||||
return $form; |
||||
} |
||||
|
||||
/** |
||||
* Redirect to Reset form. |
||||
* |
||||
* @param array $form |
||||
* Drupal form. |
||||
* @param array $form_state |
||||
* Drupal form state. |
||||
*/ |
||||
function islandora_imageserver_admin_submit_reset(array $form, array &$form_state) { |
||||
$form_state['redirect'] = 'admin/islandora/image_server/reset'; |
||||
} |
||||
|
||||
/** |
||||
* Settings reset confirmation form. |
||||
* |
||||
* @param array $form |
||||
* The Drupal form. |
||||
* @param array $form_state |
||||
* The Drupal $form_state. |
||||
* |
||||
* @return mixed |
||||
* The created form. |
||||
*/ |
||||
function islandora_imageserver_admin_reset_confirm_form(array $form, array &$form_state) { |
||||
return confirm_form( |
||||
$form, |
||||
t("Do you really want to reset the Image Server settings?"), |
||||
'admin/islandora/image_server', |
||||
t("This action cannot be undone."), |
||||
t("Reset") |
||||
); |
||||
} |
||||
|
||||
/** |
||||
* Implements hook_form_submit(). |
||||
*/ |
||||
function islandora_imageserver_admin_reset_confirm_form_submit(array $form, array &$form_state) { |
||||
variable_del('islandora_imageserver_settings'); |
||||
drupal_set_message(t('Settings reset.'), 'status'); |
||||
$form_state['redirect'] = 'admin/islandora/image_server'; |
||||
} |
||||
|
||||
/** |
||||
* Implements hook_form_submit(). |
||||
*/ |
||||
function islandora_imageserver_admin_form_submit(array $form, array &$form_state) { |
||||
$type = $form_state['values']['type']; |
||||
$settings = islandora_imageserver_get_settings(); |
||||
$settings['type'] = $type; |
||||
$settings['url'] = rtrim($form_state['values']['url'], '/'); |
||||
if ($type == 'iiif') { |
||||
$settings['iiif_token_header'] = (bool) $form_state['values']['iiif_token_header']; |
||||
$settings['iiif_identifier'] = $form_state['values']['iiif_identifier']; |
||||
} |
||||
else { |
||||
$settings['iiif_token_header'] = FALSE; |
||||
$settings['iiif_identifier'] = ISLANDORA_IMAGESERVER_DEFAULT_TOKEN; |
||||
} |
||||
variable_set('islandora_imageserver_settings', $settings); |
||||
drupal_set_message(t("Settings saved successfully."), 'status'); |
||||
} |
||||
|
||||
/** |
||||
* Callback to check URL. |
||||
* |
||||
* @param array $form |
||||
* Drupal form. |
||||
* @param array $form_state |
||||
* Drupal form state. |
||||
* |
||||
* @return mixed |
||||
* The form element. |
||||
*/ |
||||
function islandora_imageserver_admin_ajax_url(array $form, array $form_state) { |
||||
return $form['url']; |
||||
} |
||||
|
||||
/** |
||||
* Gets a message which describes if Adore-Djatoka is accessible. |
||||
* |
||||
* @param array $form_state |
||||
* The current form state. |
||||
* |
||||
* @see islandora_imageserver_get_settings() |
||||
* |
||||
* @return string |
||||
* A message describing the accessibility of the Adore-Djatoka image resolver. |
||||
*/ |
||||
function islandora_imageserver_admin_form_access_message(array &$form_state) { |
||||
$confirmation_message = ''; |
||||
|
||||
$type = islandora_imageserver_get_default_value($form_state, 'type'); |
||||
$url = islandora_imageserver_get_default_value($form_state, 'url'); |
||||
|
||||
if ($type == 'djatoka') { |
||||
$url = url($url, array( |
||||
'absolute' => TRUE, |
||||
'query' => array( |
||||
'url_ver' => 'Z39.88-2004', |
||||
'rft_id' => 'http://memory.loc.gov/gmd/gmd433/g4330/g4330/np000066.jp2', |
||||
'svc_id' => 'info:lanl-repo/svc/getRegion', |
||||
'svc_val_fmt' => 'info:ofi/fmt:kev:mtx:jpeg2000', |
||||
'svc.format' => 'image/jpeg', |
||||
'svc.level' => '1', |
||||
), |
||||
)); |
||||
} |
||||
elseif ($type == 'iiif') { |
||||
$url = url(rtrim($url, '/'), |
||||
array( |
||||
'absolute' => TRUE, |
||||
) |
||||
); |
||||
} |
||||
else { |
||||
// None, so don't confirm. |
||||
return ""; |
||||
} |
||||
|
||||
if (isset($url) && !empty($url)) { |
||||
$result = drupal_http_request($url); |
||||
if ($result->code == 200) { |
||||
$confirmation_message = theme_image(array( |
||||
'path' => 'misc/watchdog-ok.png', |
||||
'attributes' => array(), |
||||
)); |
||||
$confirmation_message .= t('Successfully connected to image server.'); |
||||
} |
||||
else { |
||||
$confirmation_message = theme_image(array( |
||||
'path' => 'misc/watchdog-error.png', |
||||
'attributes' => array(), |
||||
)); |
||||
$confirmation_message .= t('Unable to connect to image server at !path', array( |
||||
'!path' => $url, |
||||
)); |
||||
} |
||||
} |
||||
return $confirmation_message; |
||||
} |
||||
|
||||
/** |
||||
* Get image server settings. |
||||
* |
||||
* @return array |
||||
* Configuration to access the image server. |
||||
*/ |
||||
function islandora_imageserver_get_settings() { |
||||
$defaults = islandora_imageserver_get_default_settings(); |
||||
|
||||
$settings = variable_get('islandora_imageserver_settings', array()) + $defaults; |
||||
|
||||
return $settings; |
||||
} |
||||
|
||||
/** |
||||
* Return the default image server settings. |
||||
* |
||||
* @return array |
||||
* The settings. |
||||
*/ |
||||
function islandora_imageserver_get_default_settings() { |
||||
return array( |
||||
'type' => 'none', |
||||
'url' => '', |
||||
'iiif_token_header' => FALSE, |
||||
'iiif_identifier' => ISLANDORA_IMAGESERVER_DEFAULT_TOKEN, |
||||
); |
||||
} |
||||
|
||||
/** |
||||
* Utility to check form_state or return the default. |
||||
* |
||||
* @param array $form_state |
||||
* Drupal form state. |
||||
* @param string $name |
||||
* Name of the form element/settings key. |
||||
* |
||||
* @return mixed |
||||
* The Form value or currently saved value. |
||||
*/ |
||||
function islandora_imageserver_get_default_value(array &$form_state, $name) { |
||||
$settings = islandora_imageserver_get_settings(); |
||||
return isset($form_state['values'][$name]) ? $form_state['values'][$name] : $settings[$name]; |
||||
} |
||||
|
||||
/** |
||||
* Generate a replacement string using tokens. |
||||
* |
||||
* @param string $string_token |
||||
* The replacement token to generate. |
||||
* @param string $pid |
||||
* The pid of the object. |
||||
* @param string $dsid |
||||
* The dsid to return. |
||||
* @param string $authtoken |
||||
* The authentication token. |
||||
* |
||||
* @return mixed |
||||
* The token replaced string. |
||||
*/ |
||||
function islandora_imageserver_get_identifier($string_token, $pid, $dsid, $authtoken) { |
||||
$settings = islandora_imageserver_get_settings(); |
||||
if ($settings['type'] == 'djatoka') { |
||||
// We use the token_replace to generate the rft_id. |
||||
$string_token = '[islandora:url_token]'; |
||||
} |
||||
$parts = array( |
||||
'islandora' => array( |
||||
'pid' => $pid, |
||||
'dsid' => $dsid, |
||||
'token' => $authtoken, |
||||
), |
||||
); |
||||
return token_replace($string_token, $parts); |
||||
} |
||||
|
||||
/** |
||||
* Create the select box form element with the currently configured type. |
||||
* |
||||
* @param bool $disabled |
||||
* Whether the element should be disabled. |
||||
* |
||||
* @return array |
||||
* The form element. |
||||
*/ |
||||
function islandora_imageserver_get_type_selectbox($disabled = TRUE) { |
||||
$settings = islandora_imageserver_get_settings(); |
||||
$description = $disabled ? t("Configured at Admin ≫ Islandora ≫ Image server configuration.") : t("Select the image server to configure."); |
||||
return array( |
||||
'#type' => 'select', |
||||
'#title' => t('Image Server'), |
||||
'#description' => $description, |
||||
'#default_value' => $settings['type'], |
||||
'#disabled' => $disabled, |
||||
'#options' => array( |
||||
'none' => t('No image server configured'), |
||||
'iiif' => t('IIIF image server'), |
||||
'djatoka' => t('Adore-Djatoka image server'), |
||||
), |
||||
); |
||||
} |
||||
Loading…
Reference in new issue