public static function WebformManagedFileBase::validateManagedFileLimit in Webform 6.x
Same name and namespace in other branches
- 8.5 src/Plugin/WebformElement/WebformManagedFileBase.php \Drupal\webform\Plugin\WebformElement\WebformManagedFileBase::validateManagedFileLimit()
Form API callback. Validate file upload limit.
See also
\Drupal\webform\WebformSubmissionForm::validateForm
File
- src/
Plugin/ WebformElement/ WebformManagedFileBase.php, line 886
Class
- WebformManagedFileBase
- Provides a base class webform 'managed_file' elements.
Namespace
Drupal\webform\Plugin\WebformElementCode
public static function validateManagedFileLimit(array &$element, FormStateInterface $form_state, &$complete_form) {
// Set empty files to NULL and exit.
if (empty($element['#files'])) {
return;
}
// Only validate file limits for ajax uploads.
$wrapper_format = \Drupal::request()
->get(MainContentViewSubscriber::WRAPPER_FORMAT);
if (!$wrapper_format || !in_array($wrapper_format, [
'drupal_ajax',
'drupal_modal',
'drupal_dialog',
])) {
return;
}
$fids = array_keys($element['#files']);
// Get WebformSubmissionForm object.
$form_object = $form_state
->getFormObject();
if (!$form_object instanceof WebformSubmissionForm) {
return;
}
// Skip validation when removing file upload.
$trigger_element = $form_state
->getTriggeringElement();
$op = (string) $trigger_element['#value'];
if (in_array($op, [
(string) t('Remove'),
(string) t('Remove selected'),
])) {
return;
}
// Get file upload limit.
/** @var \Drupal\webform\WebformSubmissionInterface $webform_submission */
$webform_submission = $form_object
->getEntity();
$file_limit = $webform_submission
->getWebform()
->getSetting('form_file_limit') ?: \Drupal::config('webform.settings')
->get('settings.default_form_file_limit') ?: '';
$file_limit = Bytes::toInt($file_limit);
// Track file size across all file upload elements.
static $total_file_size = 0;
/** @var \Drupal\file\FileInterface[] $files */
$files = File::loadMultiple($fids);
foreach ($files as $file) {
$total_file_size += (int) $file
->getSize();
}
// If has access and total file size exceeds file limit then display error.
if (Element::isVisibleElement($element) && $total_file_size > $file_limit) {
$t_args = [
'%quota' => format_size($file_limit),
];
$message = t("This form's file upload quota of %quota has been exceeded. Please remove some files.", $t_args);
$form_state
->setError($element, $message);
}
}