From b7fb48017ec6dc0eb0bc43a54595c63522d801f0 Mon Sep 17 00:00:00 2001 From: willtp87 Date: Fri, 5 Dec 2014 14:26:50 -0400 Subject: [PATCH 1/2] Some fixes and improovements for datastream uploads. --- includes/add_datastream.form.inc | 58 +++++++++++++++----------------- includes/datastream.version.inc | 20 ++++------- includes/mimetype.utils.inc | 28 +++++++++++++++ 3 files changed, 61 insertions(+), 45 deletions(-) diff --git a/includes/add_datastream.form.inc b/includes/add_datastream.form.inc index dd5b0dbb..380880d2 100644 --- a/includes/add_datastream.form.inc +++ b/includes/add_datastream.form.inc @@ -27,8 +27,8 @@ function islandora_add_datastream_form(array $form, array &$form_state, Abstract // @deprecated Storing objects in $form_state is asking for a bad time... // Causes issues with derivative generation when we try to use it. $form_state['object'] = $object; - $form_state['datastream_requirements'] = islandora_get_missing_datastreams_requirements($object); - $unused_datastreams = array_keys($form_state['datastream_requirements']); + $datastream_requirements = islandora_get_missing_datastreams_requirements($object); + $unused_datastreams = array_keys($datastream_requirements); $unused_datastreams = "'" . implode("', '", $unused_datastreams) . "'"; $upload_size = min((int) ini_get('post_max_size'), (int) ini_get('upload_max_filesize')); return array( @@ -38,7 +38,7 @@ function islandora_add_datastream_form(array $form, array &$form_state, Abstract ), 'dsid_fieldset' => array( '#type' => 'fieldset', - '#title' => 'Add a datastream', + '#title' => 'Add a Datastream', '#collapsible' => FALSE, '#collapsed' => FALSE, 'dsid' => array( @@ -60,7 +60,7 @@ function islandora_add_datastream_form(array $form, array &$form_state, Abstract '#required' => TRUE, '#size' => 64, '#maxlength' => 64, - '#description' => t('A human-readable label'), + '#description' => t('A human-readable label.'), '#type' => 'textfield', '#element_validate' => array('islandora_add_datastream_form_field_does_not_contain_a_forward_slash'), ), @@ -69,10 +69,11 @@ function islandora_add_datastream_form(array $form, array &$form_state, Abstract '#required' => TRUE, '#title' => t('Upload Document'), '#size' => 48, - '#description' => t('Select a file to upload.
Files must be less than @size MB.', array('@size' => $upload_size)), + '#description' => t('Select a file to upload.
Files must be less than @size MB.', array('@size' => $upload_size)), '#default_value' => isset($form_state['values']['files']) ? $form_state['values']['files'] : NULL, - '#upload_location' => 'temporary://', + '#upload_location' => 'public://', '#upload_validators' => array( + // Disable default file_validate_extensions; we need direct control. 'file_validate_extensions' => array(NULL), // Assume its specified in MB. 'file_validate_size' => array($upload_size * 1024 * 1024), @@ -136,6 +137,26 @@ function islandora_add_datastream_form_field_is_valid_dsid(array $element, array } } +/** + * Validation callback for islandora_add_datastream_form. + * + * Checks if the given datastream can accept the given MIME type. + */ +function islandora_add_datastream_form_validate(array $form, array &$form_state) { + module_load_include('inc', 'islandora', 'includes/mimetype.utils'); + $extensions = islandora_get_extensions_for_datastream( + $form_state['object'], + $form_state['values']['dsid'] + ); + $file = file_load($form_state['values']['file']); + if ($file) { + $errors = file_validate_extensions($file, implode(' ', $extensions)); + if (count($errors) > 0) { + form_set_error('file', "{$errors[0]} (for the set DSID)"); + } + } +} + /** * Checks if the given form field contains a "/" character. * @@ -152,31 +173,6 @@ function islandora_add_datastream_form_field_does_not_contain_a_forward_slash(ar } } -/** - * Checks if the given datastream requires the upload to be a certain MIME type. - * - * @param array $form - * The Drupal form. - * @param array $form_state - * The Drupal form state. - */ -function islandora_add_datastream_form_validate(array $form, array &$form_state) { - $file = file_load($form_state['values']['file']); - $dsid = $form_state['values']['dsid']; - if (isset($form_state['datastream_requirements'][$dsid]) && $file) { - $allowed_types = $form_state['datastream_requirements'][$dsid]['mime']; - $mime_detect = new MimeDetect(); - $allowed_extensions = array(); - foreach ($allowed_types as $mime) { - $allowed_extensions = array_merge($allowed_extensions, $mime_detect->getValidExtensions($mime)); - } - $errors = file_validate_extensions($file, implode(' ', $allowed_extensions)); - if (count($errors) > 0) { - form_set_error('file', $errors[0]); - } - } -} - /** * Adds the new datastream based on the submitted values. * diff --git a/includes/datastream.version.inc b/includes/datastream.version.inc index 4f2a9960..225e5ff3 100644 --- a/includes/datastream.version.inc +++ b/includes/datastream.version.inc @@ -281,31 +281,23 @@ function islandora_datastream_version_replace_form($form, &$form_state, Abstract $form_state['object_id'] = $object->id; $form_state['dsid'] = $datastream->id; $form_state['object'] = $object; - $datastream_mime_map = islandora_get_object_extensions($object); - $current_mime = $datastream->mimetype; - $mimes = $datastream_mime_map[$datastream->id]['mime']; - if (!in_array($current_mime, $mimes)) { - $mimes[] = $current_mime; - } - $extensions = array(); - foreach ($mimes as $mime) { - $extensions = array_merge($extensions, islandora_get_extensions_for_mimetype($mime)); - } + + $extensions = islandora_get_extensions_for_datastream($object, $datastream->id); $valid_extensions = implode(' ', $extensions); $upload_size = min((int) ini_get('post_max_size'), (int) ini_get('upload_max_filesize')); return array( 'dsid_fieldset' => array( '#type' => 'fieldset', - '#title' => t("Update datastream with latest version"), + '#title' => t("Update Datastream"), '#collapsible' => FALSE, '#collapsed' => FALSE, 'dsid' => array( '#type' => 'markup', - '#markup' => "
DSID: $datastream->id
", + '#markup' => "
DSID: $datastream->id
", ), 'label' => array( '#type' => 'markup', - '#markup' => "
Label: $datastream->label
", + '#markup' => "
Label: $datastream->label
", ), 'file' => array( '#type' => 'managed_file', @@ -313,7 +305,7 @@ function islandora_datastream_version_replace_form($form, &$form_state, Abstract '#title' => t('Upload Document'), '#size' => 64, '#description' => t('Select a file to upload.
Files must be less than @size MB.', array('@size' => $upload_size)), - '#upload_location' => 'temporary://', + '#upload_location' => 'public://', '#upload_validators' => array( 'file_validate_extensions' => array($valid_extensions), // Assume its specified in MB. diff --git a/includes/mimetype.utils.inc b/includes/mimetype.utils.inc index 1a20859d..4d87409d 100644 --- a/includes/mimetype.utils.inc +++ b/includes/mimetype.utils.inc @@ -58,3 +58,31 @@ function islandora_get_extensions_for_mimetype($mimetype) { } return $extensions; } + +/** + * Mimes accepted by a datastream. + * + * @param AbstractObject $object + * Object to check for extensions. + * @param string $dsid + * Datastream ID to check for extensions. + * + * @return array + * Mimes accepted by the datastream ID on the object. + */ +function islandora_get_extensions_for_datastream(AbstractObject $object, $dsid) { + module_load_include('inc', 'islandora', 'includes/utilities'); + $datastream_mime_map = islandora_get_datastreams_requirements_from_models($object->models); + $mimes = $datastream_mime_map[$dsid]['mime']; + if (isset($object[$dsid])) { + $current_mime = $object[$dsid]->mimetype; + if (!in_array($current_mime, $mimes)) { + $mimes[] = $current_mime; + } + } + $extensions = array(); + foreach ($mimes as $mime) { + $extensions = array_merge($extensions, islandora_get_extensions_for_mimetype($mime)); + } + return $extensions; +} From e9b47575513d9a65330c81c9514c68907d44188d Mon Sep 17 00:00:00 2001 From: willtp87 Date: Fri, 5 Dec 2014 16:22:29 -0400 Subject: [PATCH 2/2] More translation. --- includes/add_datastream.form.inc | 7 +++++-- includes/datastream.version.inc | 4 ++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/includes/add_datastream.form.inc b/includes/add_datastream.form.inc index 380880d2..40e1537d 100644 --- a/includes/add_datastream.form.inc +++ b/includes/add_datastream.form.inc @@ -38,7 +38,7 @@ function islandora_add_datastream_form(array $form, array &$form_state, Abstract ), 'dsid_fieldset' => array( '#type' => 'fieldset', - '#title' => 'Add a Datastream', + '#title' => t('Add a Datastream'), '#collapsible' => FALSE, '#collapsed' => FALSE, 'dsid' => array( @@ -152,7 +152,10 @@ function islandora_add_datastream_form_validate(array $form, array &$form_state) if ($file) { $errors = file_validate_extensions($file, implode(' ', $extensions)); if (count($errors) > 0) { - form_set_error('file', "{$errors[0]} (for the set DSID)"); + form_set_error( + 'file', + t("!error (for the set DSID)", array('!error' => $errors[0])) + ); } } } diff --git a/includes/datastream.version.inc b/includes/datastream.version.inc index 225e5ff3..a8ecf102 100644 --- a/includes/datastream.version.inc +++ b/includes/datastream.version.inc @@ -293,11 +293,11 @@ function islandora_datastream_version_replace_form($form, &$form_state, Abstract '#collapsed' => FALSE, 'dsid' => array( '#type' => 'markup', - '#markup' => "
DSID: $datastream->id
", + '#markup' => t("
DSID: @dsid
", array('@dsid' => $datastream->id)), ), 'label' => array( '#type' => 'markup', - '#markup' => "
Label: $datastream->label
", + '#markup' => t("
Label: @label
", array('@label' => $datastream->label)), ), 'file' => array( '#type' => 'managed_file',