diff --git a/core/modules/file/file.field.inc b/core/modules/file/file.field.inc
index a42bd78..d14062b 100644
--- a/core/modules/file/file.field.inc
+++ b/core/modules/file/file.field.inc
@@ -433,16 +433,29 @@ function theme_file_widget_multiple($variables) {
/**
* Returns HTML for help text based on file upload validators.
*
- * @param $variables
+ * @param array $variables
* An associative array containing:
* - description: The normal description for this field, specified by the
* user.
* - upload_validators: An array of upload validators as used in
* $element['#upload_validators'].
+ * - cardinality: The number of files this field can store. -1 is unlimited.
+ * - separator: The string used to separate description components. Defaults
+ * to '
'.
*
- * @ingroup themeable
+ * @return string
+ * A string containing all the components of a file upload field description
+ * explaining the criteria for uploading files to this field.
*/
-function theme_file_upload_help($variables) {
+function file_upload_description($variables = array()) {
+ // Merge in defaults.
+ $variables += array(
+ 'description' => '',
+ 'upload_validators' => array(),
+ 'cardinality' => NULL,
+ 'separator' => '
',
+ );
+
$description = $variables['description'];
$upload_validators = $variables['upload_validators'];
$cardinality = $variables['cardinality'];
@@ -450,14 +463,14 @@ function theme_file_upload_help($variables) {
$descriptions = array();
if (strlen($description)) {
- $descriptions[] = _filter_htmlcorrector($description);
+ $descriptions['description'] = _filter_htmlcorrector($description);
}
if (isset($cardinality)) {
if ($cardinality == -1) {
- $descriptions[] = t('Unlimited number of files can be uploaded to this field.');
+ $descriptions['cardinality'] = t('Unlimited number of files can be uploaded to this field.');
}
else {
- $descriptions[] = format_plural($cardinality, 'One file only.', 'Maximum @count files.');
+ $descriptions['cardinality'] = format_plural($cardinality, 'One file only.', 'Maximum @count files.');
}
}
if (isset($upload_validators['file_validate_size'])) {
@@ -471,20 +484,23 @@ function theme_file_upload_help($variables) {
$max = $upload_validators['file_validate_image_resolution'][0];
$min = $upload_validators['file_validate_image_resolution'][1];
if ($min && $max && $min == $max) {
- $descriptions[] = t('Images must be exactly !size pixels.', array('!size' => '' . $max . ''));
+ $descriptions['file_validate_image_resolution'] = t('Images must be exactly !size pixels.', array('!size' => '' . $max . ''));
}
elseif ($min && $max) {
- $descriptions[] = t('Images must be between !min and !max pixels.', array('!min' => '' . $min . '', '!max' => '' . $max . ''));
+ $descriptions['file_validate_image_resolution'] = t('Images must be between !min and !max pixels.', array('!min' => '' . $min . '', '!max' => '' . $max . ''));
}
elseif ($min) {
- $descriptions[] = t('Images must be larger than !min pixels.', array('!min' => '' . $min . ''));
+ $descriptions['file_validate_image_resolution'] = t('Images must be larger than !min pixels.', array('!min' => '' . $min . ''));
}
elseif ($max) {
- $descriptions[] = t('Images must be smaller than !max pixels.', array('!max' => '' . $max . ''));
+ $descriptions['file_validate_image_resolution'] = t('Images must be smaller than !max pixels.', array('!max' => '' . $max . ''));
}
}
- return implode(' ', $descriptions);
+ // Allow other modules to modify the description components.
+ Drupal::moduleHandler()->alter(__FUNCTION__, $descriptions, $variables);
+
+ return implode($variables['separator'], $descriptions);
}
/**
diff --git a/core/modules/file/file.module b/core/modules/file/file.module
index f2b0fef..4923a3b 100644
--- a/core/modules/file/file.module
+++ b/core/modules/file/file.module
@@ -601,9 +601,6 @@ function file_theme() {
'file_formatter_table' => array(
'variables' => array('items' => NULL),
),
- 'file_upload_help' => array(
- 'variables' => array('description' => NULL, 'upload_validators' => NULL, 'cardinality' => NULL),
- ),
);
}
diff --git a/core/modules/file/lib/Drupal/file/Plugin/Field/FieldWidget/FileWidget.php b/core/modules/file/lib/Drupal/file/Plugin/Field/FieldWidget/FileWidget.php
index 7ce14b8..1bd6962 100644
--- a/core/modules/file/lib/Drupal/file/Plugin/Field/FieldWidget/FileWidget.php
+++ b/core/modules/file/lib/Drupal/file/Plugin/Field/FieldWidget/FileWidget.php
@@ -157,12 +157,7 @@ protected function formMultipleElements(FieldItemListInterface $items, array &$f
// field. These are added here so that they may be referenced easily
// through a hook_form_alter().
$elements['#file_upload_title'] = t('Add a new file');
- $elements['#file_upload_description'] = array(
- '#theme' => 'file_upload_help',
- '#description' => '',
- '#upload_validators' => $elements[0]['#upload_validators'],
- '#cardinality' => $cardinality,
- );
+ $elements['#file_upload_description'] = file_upload_description(array('description' => '', 'upload_validators' => $elements[0]['#upload_validators'], 'cardinality' => $cardinality));
}
return $elements;
@@ -221,13 +216,7 @@ public function formElement(FieldItemListInterface $items, $delta, array $elemen
$default_fids = $element['#extended'] ? $element['#default_value']['fids'] : $element['#default_value'];
if (empty($default_fids)) {
- $file_upload_help = array(
- '#theme' => 'file_upload_help',
- '#description' => $element['#description'],
- '#upload_validators' => $element['#upload_validators'],
- '#cardinality' => $cardinality,
- );
- $element['#description'] = drupal_render($file_upload_help);
+ $element['#description'] = file_upload_description(array('description' => $element['#description'], 'upload_validators' => $element['#upload_validators'], 'cardinality' => $cardinality));
$element['#multiple'] = $cardinality != 1 ? TRUE : FALSE;
if ($cardinality != 1 && $cardinality != -1) {
$element['#element_validate'] = array('file_field_widget_multiple_count_validate');
diff --git a/core/modules/image/lib/Drupal/image/Plugin/Field/FieldWidget/ImageWidget.php b/core/modules/image/lib/Drupal/image/Plugin/Field/FieldWidget/ImageWidget.php
index 3a37aa0..8699776 100644
--- a/core/modules/image/lib/Drupal/image/Plugin/Field/FieldWidget/ImageWidget.php
+++ b/core/modules/image/lib/Drupal/image/Plugin/Field/FieldWidget/ImageWidget.php
@@ -87,12 +87,11 @@ protected function formMultipleElements(FieldItemListInterface $items, array &$f
if ($cardinality == 1) {
// If there's only one field, return it as delta 0.
if (empty($elements[0]['#default_value']['fids'])) {
- $file_upload_help['#description'] = field_filter_xss($this->fieldDefinition->getFieldDescription());
- $elements[0]['#description'] = drupal_render($file_upload_help);
+ $elements[0]['#description'] = file_upload_description(array('description' => field_filter_xss($this->fieldDefinition->getFieldDescription()), 'upload_validators' => $elements[0]['#upload_validators'], 'cardinality' => $cardinality));
}
}
else {
- $elements['#file_upload_description'] = drupal_render($file_upload_help);
+ $elements['#file_upload_description'] = file_upload_description(array('upload_validators' => $elements[0]['#upload_validators'], 'cardinality' => $cardinality));
}
return $elements;
diff --git a/core/modules/locale/locale.bulk.inc b/core/modules/locale/locale.bulk.inc
index 5256244..a3d1e1e 100644
--- a/core/modules/locale/locale.bulk.inc
+++ b/core/modules/locale/locale.bulk.inc
@@ -56,7 +56,7 @@ function locale_translate_import_form($form, &$form_state) {
$form['file'] = array(
'#type' => 'file',
'#title' => t('Translation file'),
- '#description' => theme('file_upload_help', array('description' => t('A Gettext Portable Object file.'), 'upload_validators' => $validators)),
+ '#description' => file_upload_description(array('description' => t('A Gettext Portable Object file.'), 'upload_validators' => $validators)),
'#size' => 50,
'#upload_validators' => $validators,
'#attributes' => array('class' => array('file-import-input')),