diff --git a/includes/ingest.form.inc b/includes/ingest.form.inc index 0f8e843e..db031dc0 100644 --- a/includes/ingest.form.inc +++ b/includes/ingest.form.inc @@ -35,7 +35,7 @@ function islandora_ingest_form(array $form, array &$form_state, array $configura islandora_ingest_form_init_form_state_storage($form_state, $configuration); return islandora_ingest_form_execute_step($form, $form_state); } - catch(Exception $e) { + catch (Exception $e) { drupal_set_message($e->getMessage(), 'error'); return array(array( '#markup' => l(t('Back'), 'javascript:window.history.back();', array('external' => TRUE)))); @@ -242,7 +242,7 @@ function islandora_ingest_get_approximate_steps(array $configuration) { try { islandora_ingest_form_validate_configuration($configuration); } - catch(InvalidArgumentException $e) { + catch (InvalidArgumentException $e) { // Don't log or display exception. return array(); } diff --git a/includes/tuque_wrapper.inc b/includes/tuque_wrapper.inc index 4d989e9f..14a770e2 100644 --- a/includes/tuque_wrapper.inc +++ b/includes/tuque_wrapper.inc @@ -205,7 +205,7 @@ class IslandoraFedoraApiM extends FedoraApiM { } return $ret; } - catch(Exception $e) { + catch (Exception $e) { watchdog('islandora', 'Failed to modify datastream @dsid from @pid
code: @code
message: @msg', array( '@pid' => $pid, '@dsid' => $dsid, @@ -239,7 +239,7 @@ class IslandoraFedoraApiM extends FedoraApiM { } return $ret; } - catch(Exception $e) { + catch (Exception $e) { watchdog('islandora', 'Failed to modify object: @pid
code: @code
message: @msg', array( '@pid' => $pid, '@code' => $e->getCode(), @@ -281,7 +281,7 @@ class IslandoraFedoraApiM extends FedoraApiM { return $ret; } } - catch(Exception $e) { + catch (Exception $e) { watchdog('islandora', 'Failed to purge datastream @dsid from @pid
code: @code
message: @msg', array( '@pid' => $pid, '@dsid' => $dsid, @@ -325,7 +325,7 @@ class IslandoraFedoraApiM extends FedoraApiM { return $ret; } } - catch(Exception $e) { + catch (Exception $e) { watchdog('islandora', 'Failed to purge object @pid
code: @code
message: @msg', array( '@pid' => $pid, '@code' => $e->getCode(), diff --git a/includes/utilities.inc b/includes/utilities.inc index f061f72c..ec155eb9 100644 --- a/includes/utilities.inc +++ b/includes/utilities.inc @@ -465,20 +465,44 @@ function islandora_prepare_new_object($namespace = NULL, $label = NULL, $datastr if (isset($ds['control_group']) && in_array($ds['control_group'], $groups)) { $control_group = $ds['control_group']; } - $ds_uri = FALSE; + + $as_file = FALSE; if (file_valid_uri($ds['datastream_file'])) { + // A local file with as a Drupal file/stream wrapper URI. $datastream_file = $ds['datastream_file']; - $ds_uri = TRUE; + $as_file = TRUE; + } + elseif (is_readable($ds['datastream_file'])) { + // A local file as a filesystem path. + $datastream_file = drupal_realpath($ds['datastream_file']); + $as_file = TRUE; } else { - $datastream_file = url($ds['datastream_file'], array('absolute' => TRUE)); + $scheme = parse_url($ds['datastream_file'], PHP_URL_SCHEME); + if (in_array($scheme, stream_get_wrappers())) { + // A URI which gets handled by one of the PHP-native stream wrappers. + $datastream_file = $ds['datastream_file']; + $as_file = TRUE; + } + else { + // Schema does not match available php stream wrapper. Attempt to + // set datastream_file by url for the given scheme. Https (SSL) can + // cause this to fail, and trigger an output log in watchdog. + $datastream_file = url($ds['datastream_file'], array('absolute' => TRUE)); + watchdog('islandora', 'Attempting to ingest %file in islandora_prepare_new_object(), ' . + ' but it does not appear to be readable. We will pass the path through' . + ' url(), and pass along as such.', + array('%file' => $datastream_file), + WATCHDOG_WARNING); + } } + $datastream = $object->constructDatastream($dsid, $control_group); $datastream->label = $label; $datastream->mimetype = $mimetype; switch ($control_group) { case 'M': - if ($ds_uri) { + if ($as_file) { $datastream->setContentFromFile($datastream_file); } else { @@ -490,8 +514,10 @@ function islandora_prepare_new_object($namespace = NULL, $label = NULL, $datastr $datastream->setContentFromString(file_get_contents($datastream_file)); break; } + $object->ingestDatastream($datastream); } + return $object; } @@ -505,8 +531,8 @@ function islandora_display_repository_inaccessible_message() { $text = t('Islandora configuration'); $link = l($text, 'admin/islandora/configure', array('attributes' => array('title' => $text))); $message = t('Could not connect to the repository. Please check the settings on the !link page.', - array('!link' => $link)); - drupal_set_message($message, 'error', FALSE); + array('!link' => $link)); + drupal_set_message(check_plain($message), 'error', FALSE); } /** diff --git a/islandora.module b/islandora.module index a4552379..ad9e569e 100644 --- a/islandora.module +++ b/islandora.module @@ -966,7 +966,7 @@ function islandora_delete_object(FedoraObject &$object) { $object = NULL; return TRUE; } - catch(Exception $e) { + catch (Exception $e) { // Exception message gets logged in Tuque Wrapper. return FALSE; } diff --git a/tests/hooks.test b/tests/hooks.test index bc3020f3..3133d656 100644 --- a/tests/hooks.test +++ b/tests/hooks.test @@ -67,7 +67,7 @@ class IslandoraHooksTestCase extends IslandoraWebTestCase { $object->label = "Don't Block"; $this->repository->purgeObject($object->id); } - catch(Exception $e) { + catch (Exception $e) { // Meh... Either it didn't exist or the purge failed. } } @@ -95,7 +95,7 @@ class IslandoraHooksTestCase extends IslandoraWebTestCase { $this->fail('Blocked ingest should throw an Exception.'); $this->repository->purgeObject($object->id); } - catch(Exception $e) { + catch (Exception $e) { $this->pass('Ingest blocked and exception thrown.'); $this->assert($_SESSION['islandora_hooks']['alter'][ISLANDORA_OBJECT_INGESTED_HOOK], 'Called "hook_islandora_object_alter" when blocking ingesting via FedoraRepository::ingestObject.'); $this->assertFalse($_SESSION['islandora_hooks']['hook'][ISLANDORA_OBJECT_INGESTED_HOOK], 'Did not called ISLANDORA_OBJECT_INGESTED_HOOK when blocking ingesting via FedoraRepository::ingestObject.'); @@ -115,7 +115,7 @@ class IslandoraHooksTestCase extends IslandoraWebTestCase { $object->label = 'block'; $this->fail('Blocked modify should throw an Exception.'); } - catch(Exception $e) { + catch (Exception $e) { $this->pass('Modify blocked and exception thrown.'); $this->assertNotEqual($object->label, 'block', 'Modification did not stick.'); $this->assert($_SESSION['islandora_hooks']['alter'][ISLANDORA_OBJECT_MODIFIED_HOOK], 'Called "hook_islandora_object_alter" when blocking modifying via set magic functions.'); @@ -149,7 +149,7 @@ class IslandoraHooksTestCase extends IslandoraWebTestCase { $this->repository->purgeObject($object->id); $this->fail('Blocked modify should throw an Exception.'); } - catch(Exception $e) { + catch (Exception $e) { $this->pass('Modify blocked and exception thrown.'); $this->assert($_SESSION['islandora_hooks']['alter'][ISLANDORA_OBJECT_PURGED_HOOK], 'Called "hook_islandora_object_alter" when blocking purge via FedoraRepository::purgeObject.'); $this->assertFalse($_SESSION['islandora_hooks']['hook'][ISLANDORA_OBJECT_PURGED_HOOK], 'Called ISLANDORA_OBJECT_PURGED_HOOK when blocking purge via FedoraRepository::purgeObject.'); @@ -191,7 +191,7 @@ class IslandoraHooksTestCase extends IslandoraWebTestCase { $ds->label = 'block'; $this->fail('Blocked modify should throw an Exception.'); } - catch(Exception $e) { + catch (Exception $e) { $this->pass('Modify blocked and exception thrown.'); $this->assert($_SESSION['islandora_hooks']['alter'][ISLANDORA_DATASTREAM_MODIFIED_HOOK], 'Called "hook_islandora_datastream_alter" when blocking modifying via set magic functions.'); $this->assertFALSE($_SESSION['islandora_hooks']['hook'][ISLANDORA_DATASTREAM_MODIFIED_HOOK], 'Called ISLANDORA_DATASTREAM_MODIFIED_HOOK when blocking modifying via set magic functions.');