FileUploadForm.php in Media Directories 3.x
Same filename and directory in other branches
Namespace
Drupal\media_directories_ui\FormFile
modules/media_directories_ui/src/Form/FileUploadForm.phpView source
<?php
namespace Drupal\media_directories_ui\Form;
use Drupal\Core\Field\FieldStorageDefinitionInterface;
use Drupal\Core\Form\FormBuilderInterface;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Url;
use Drupal\media\MediaInterface;
class FileUploadForm extends AddMediaFormBase {
protected function buildInputElement(array $form, FormStateInterface $form_state) {
$max_filesize = \Drupal\Component\Utility\Environment::getUploadMaxSize();
$media_type = $this
->getMediaType($form_state);
$process = (array) \Drupal::service('element_info')
->getInfoProperty('managed_file', '#process', []);
$source_field = $media_type
->getSource()
->getConfiguration()['source_field'];
$field_config = $this->entityTypeManager
->getStorage('field_config')
->load('media.' . $media_type
->id() . '.' . $source_field);
$form['container']['upload'] = [
'#type' => 'managed_file',
'#title' => $field_config
->label(),
'#description' => $this
->t('Allowed file extensions: @extensions', [
'@extensions' => $field_config
->getSetting('file_extensions'),
]),
'#upload_validators' => [
'file_validate_extensions' => [
$field_config
->getSetting('file_extensions'),
],
],
'#multiple' => TRUE,
'#upload_location' => 'public://media-directories/',
'#process' => array_merge([
'::validateUploadElement',
], $process, [
'::processUploadElement',
]),
];
return $form;
}
/**
* Validates the upload element.
*
* @param array $element
* The upload element.
* @param \Drupal\Core\Form\FormStateInterface $form_state
* The form state.
*
* @return array
* The processed upload element.
*/
public function validateUploadElement(array $element, FormStateInterface $form_state) {
/* if ($form_state::hasAnyErrors()) {
// When an error occurs during uploading files, remove all files so the
// user can re-upload the files.
$element['#value'] = [];
}
$values = $form_state->getValue('upload', []);
if (count($values['fids']) > $element['#cardinality'] && $element['#cardinality'] !== FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED) {
$form_state->setError($element, $this->t('A maximum of @count files can be uploaded.', [
'@count' => $element['#cardinality'],
]));
$form_state->setValue('upload', []);
$element['#value'] = [];
}*/
return $element;
}
/**
* Processes an upload (managed_file) element.
*
* @param array $element
* The upload element.
* @param \Drupal\Core\Form\FormStateInterface $form_state
* The form state.
*
* @return array
* The processed upload element.
*/
public function processUploadElement(array $element, FormStateInterface $form_state) {
$element['upload_button']['#submit'] = [
'::uploadButtonSubmit',
];
// Limit the validation errors to make sure
// FormValidator::handleErrorsWithLimitedValidation doesn't remove the
// current selection from the form state.
// @see Drupal\Core\Form\FormValidator::handleErrorsWithLimitedValidation()
$element['upload_button']['#limit_validation_errors'] = [
[
'upload',
],
[
'current_selection',
],
];
$element['upload_button']['#ajax'] = [
'callback' => '::updateFormCallback',
'wrapper' => 'media-library-wrapper',
];
return $element;
}
/**
* Submit handler for the upload button, inside the managed_file element.
*
* @param array $form
* The form render array.
* @param \Drupal\Core\Form\FormStateInterface $form_state
* The form state.
*/
public function uploadButtonSubmit(array $form, FormStateInterface $form_state) {
$files = $this->entityTypeManager
->getStorage('file')
->loadMultiple($form_state
->getValue('upload', []));
$this
->processInputValues($files, $form, $form_state);
}
/**
* {@inheritdoc}
*/
protected function prepareMediaEntityForSave(MediaInterface $media) {
/** @var \Drupal\file\FileInterface $file */
$file = $media
->get($this
->getSourceFieldName($media->bundle->entity))->entity;
$file
->setPermanent();
$file
->save();
}
}
Classes
Name![]() |
Description |
---|---|
FileUploadForm |