You are here

function file_managed_file_save_upload in Zircon Profile 8.0

Same name and namespace in other branches
  1. 8 core/modules/file/file.module \file_managed_file_save_upload()

Saves any files that have been uploaded into a managed_file element.

Parameters

array $element: The FAPI element whose values are being saved.

\Drupal\Core\Form\FormStateInterface $form_state: The current state of the form.

Return value

array An array of file entities for each file that was saved, keyed by its file ID, or FALSE if no files were saved.

1 call to file_managed_file_save_upload()
ManagedFile::valueCallback in core/modules/file/src/Element/ManagedFile.php
Determines how user input is mapped to an element's #value property.

File

core/modules/file/file.module, line 1158
Defines a "managed_file" Form API field and a "file" field for Field module.

Code

function file_managed_file_save_upload($element, FormStateInterface $form_state) {
  $upload_name = implode('_', $element['#parents']);
  $file_upload = \Drupal::request()->files
    ->get("files[{$upload_name}]", NULL, TRUE);
  if (empty($file_upload)) {
    return FALSE;
  }
  $destination = isset($element['#upload_location']) ? $element['#upload_location'] : NULL;
  if (isset($destination) && !file_prepare_directory($destination, FILE_CREATE_DIRECTORY)) {
    \Drupal::logger('file')
      ->notice('The upload directory %directory for the file field !name could not be created or is not accessible. A newly uploaded file could not be saved in this directory as a consequence, and the upload was canceled.', array(
      '%directory' => $destination,
      '!name' => $element['#field_name'],
    ));
    $form_state
      ->setError($element, t('The file could not be uploaded.'));
    return FALSE;
  }

  // Save attached files to the database.
  $files_uploaded = $element['#multiple'] && count(array_filter($file_upload)) > 0;
  $files_uploaded |= !$element['#multiple'] && !empty($file_upload);
  if ($files_uploaded) {
    if (!($files = file_save_upload($upload_name, $element['#upload_validators'], $destination))) {
      \Drupal::logger('file')
        ->notice('The file upload failed. %upload', array(
        '%upload' => $upload_name,
      ));
      $form_state
        ->setError($element, t('Files in the @name field were unable to be uploaded.', array(
        '@name' => $element['#title'],
      )));
      return array();
    }

    // Value callback expects FIDs to be keys.
    $files = array_filter($files);
    $fids = array_map(function ($file) {
      return $file
        ->id();
    }, $files);
    return empty($files) ? array() : array_combine($fids, $files);
  }
  return array();
}