diff --git a/ObjectHelper.inc b/ObjectHelper.inc index 12f8dd9b..9e842c33 100644 --- a/ObjectHelper.inc +++ b/ObjectHelper.inc @@ -186,7 +186,7 @@ class ObjectHelper { //Set what headers we can... if ($mimeType = $info['content_type']) { - header("Content-Type: $mimeType"); + drupal_set_header("Content-Type: $mimeType"); if ($asAttachment) { $suggestedFileName = "$label"; @@ -212,7 +212,7 @@ class ObjectHelper { $suggestedFileName = "$label.$ext"; } - header('Content-Disposition: attachment; filename="' . $suggestedFileName . '"'); + drupal_set_header('Content-Disposition: attachment; filename="' . $suggestedFileName . '"'); } } @@ -227,14 +227,14 @@ class ObjectHelper { unset($query['q']); } - header('HTTP/1.1 307 Moved Temporarily'); - header('Location: ' . url($effective_url, array('query' => $query))); + drupal_set_header('HTTP/1.1 307 Moved Temporarily'); + drupal_set_header('Location: ' . url($effective_url, array('query' => $query))); } elseif ((isset($user) && $user->uid != 0) || $forceSoap || isset($_SERVER['HTTPS'])) { //If not anonymous, soap is force or we're using HTTPS //Have the webserver mediate the transfer (download and restream) if (($contentSize = self::getDatastreamSize($pid, $dsID, TRUE)) > 0) { - header("Content-Length: $contentSize"); + drupal_set_header("Content-Length: $contentSize"); } $opts = array( @@ -253,8 +253,8 @@ class ObjectHelper { } } else { //Try to redirect directly to Fedora. - header('HTTP/1.1 307 Moved Temporarily'); - header('Location: ' . $url); + drupal_set_header('HTTP/1.1 307 Moved Temporarily'); + drupal_set_header('Location: ' . $url); } } else { diff --git a/fedora_repository.module b/fedora_repository.module index 2dc986f8..a4f337e9 100644 --- a/fedora_repository.module +++ b/fedora_repository.module @@ -220,18 +220,26 @@ function fedora_repository_ingest_form_validate($form, &$form_state) { // Get the uploaded file. $validators = array(); - if (!empty($_FILES['files']['name']['ingest-file-location'])) { - $fileObject = file_save_upload('ingest-file-location', $validators); + $ifl = 'ingest-file-location'; + $fileObject = NULL; + //Check if it's already there; this is what upload_element provides. + if (is_a($form_state['values'][$ifl], 'stdClass') && property_exists($form_state['values'][$ifl], '')) { + $fileObject = $form_state['values'][$ifl]; + } + elseif (!empty($_FILES['files']['name'][$ifl])) { + $fileObject = file_save_upload($ifl, $validators); + } + if ($fileObject !== NULL && property_exists($fileObject, 'filepath')) { file_move($fileObject->filepath, 0, 'FILE_EXISTS_RENAME'); - $form_state['values']['ingest-file-location'] = $fileObject->filepath; + $form_state['values'][$ifl] = $fileObject->filepath; } - if (isset($form_state['values']['ingest-file-location']) && file_exists($form_state['values']['ingest-file-location'])) { + if (isset($form_state['values'][$ifl]) && file_exists($form_state['values'][$ifl])) { module_load_include('inc', 'fedora_repository', 'ContentModel'); module_load_include('inc', 'fedora_repository', 'MimeClass'); - $file = $form_state['values']['ingest-file-location']; + $file = $form_state['values'][$ifl]; $contentModelPid = ContentModel::getPidFromIdentifier($form_state['values']['models']); $contentModelDsid = ContentModel::getDSIDFromIdentifier($form_state['values']['models']); @@ -244,11 +252,11 @@ function fedora_repository_ingest_form_validate($form, &$form_state) { if (!empty($file)) { if (!in_array($dformat, $allowedMimeTypes)) { - form_set_error('ingest-file-location', - t('The uploaded file\'s mimetype') . - ' (' . $dformat . ') ' . - t('is not associated with this Content Model. The allowed types are') . - ' ' . implode(' ', $allowedMimeTypes)); + form_set_error($ifl, + t('The uploaded file\'s mimetype (@mime) is not associated with this Content Model. The allowed types are: @allowed', array( + '@mime' => $dformat, + '@allowed' => implode(', ', $allowedMimeTypes), + ))); file_delete($file); return; } @@ -1163,6 +1171,9 @@ function fedora_object_as_attachment($pid, $dsId, $label=NULL, $version=NULL) { return ' '; } + //Disable the page cache, so entire datastreams do not get thrown into the page cache. + $GLOBALS['conf']['cache'] = CACHE_DISABLED; + $objectHelper = new ObjectHelper(); $objectHelper->makeObject($pid, $dsId, TRUE, $label, FALSE, $version); }