public static function FileWidget::value in PlUPload File Widget 8
Important!! The core FILE API relies on the value callback to save the managed file, not the submit handler. The submit handler is only used for file deletions.
Overrides FileWidget::value
File
- src/
Plugin/ Field/ FieldWidget/ FileWidget.php, line 130
Class
- FileWidget
- Plugin annotation @FieldWidget( id = "plupload_file_widget", label = @Translation("PLupload widget"), field_types = { "file" } )
Namespace
Drupal\plupload_widget\Plugin\Field\FieldWidgetCode
public static function value($element, $input = FALSE, FormStateInterface $form_state) {
// We need to fake the element ID for the PlUploadFile form element
// to work as expected as it is being nested in a form sub-element calle
// upload.
$id = $element['#id'];
$id_backup = $id;
// If a unique identifier added with '--', we need to exclude it
if (preg_match('/(.*)(--[0-9A-Za-z-]+)$/', $id, $reg)) {
$id = $reg[1];
}
// The form element is going to tell us if one
// or more files where uploaded.
$element['#id'] = $id . '-upload';
$files = \Drupal\plupload\Element\PlUploadFile::valueCallback($element, $input, $form_state);
$element['#id'] = $id_backup;
if (empty($files)) {
return parent::value($element, $input, $form_state);
}
// During form rebuild after submit or ajax request this
// method might be called twice, but we do not want to
// generate the file entities twice....
// This files are RAW files, they are not registered
// anywhere, so won't get deleted on CRON runs :(
$file = reset($files);
$destination = \Drupal::config('system.file')
->get('default_scheme') . '://' . $file['name'];
$destination = file_stream_wrapper_uri_normalize($destination);
/** @var \Drupal\file\Entity\File */
$f = entity_create('file', array(
'uri' => $file['tmppath'],
'uid' => \Drupal::currentUser()
->id(),
'status' => 0,
'filename' => drupal_basename($destination),
'filemime' => \Drupal::service('file.mime_type.guesser')
->guess($destination),
));
$f
->save();
$return['fids'][] = $f
->id();
return $return;
}