file_managed_file_save_upload

file_managed_file_save_upload($element, FormStateInterface $form_state)

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|false An array of file entities for each file that was saved, keyed by its file ID. Each array element contains a file entity. Function returns FALSE if upload directory could not be created or no files were uploaded.

File

core/modules/file/file.module, line 1176
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']);
  $all_files = \Drupal::request()->files->get('files', array());
  if (empty($all_files[$upload_name])) {
    return FALSE;
  }
  $file_upload = $all_files[$upload_name];

  $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();
}
doc_Drupal
2016-10-29 09:14:13
Comments
Leave a Comment

Please login to continue.