You are here

protected static function FilebrowserManagedFile::custom_file_managed_file_save_upload in Filebrowser 3.x

Same name and namespace in other branches
  1. 8.2 src/Element/FilebrowserManagedFile.php \Drupal\filebrowser\Element\FilebrowserManagedFile::custom_file_managed_file_save_upload()
1 call to FilebrowserManagedFile::custom_file_managed_file_save_upload()
FilebrowserManagedFile::valueCallback in src/Element/FilebrowserManagedFile.php
Determines how user input is mapped to an element's #value property.

File

src/Element/FilebrowserManagedFile.php, line 31

Class

FilebrowserManagedFile
Provides an AJAX/progress aware widget for uploading and saving a file.

Namespace

Drupal\filebrowser\Element

Code

protected static function custom_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) && !\Drupal::service('file_system')
    ->prepareDirectory($destination, FileSystemInterface::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) {
    $nid = \Drupal::routeMatch()
      ->getParameter('nid');
    if (ctype_digit($nid)) {
      $node = Node::load($nid);
    }
    else {
      $node = null;
    }
    if ($node instanceof NodeInterface) {
      $config = \Drupal::config('filebrowser.settings');
      $config = $config
        ->get('filebrowser');
      $nodeValues = isset($node->filebrowser) ? $node->filebrowser : null;
      $allowOverwrite = isset($nodeValues->allowOverwrite) ? $nodeValues->allowOverwrite : $config['uploads']['allow_overwrite'];
      if ($allowOverwrite) {
        $files = file_save_upload($upload_name, $element['#upload_validators'], $destination, null, FileSystem::EXISTS_REPLACE);
      }
      else {
        $files = file_save_upload($upload_name, $element['#upload_validators'], $destination);
      }
    }
    else {
      $files = file_save_upload($upload_name, $element['#upload_validators'], $destination);
    }
    if (!$files) {
      \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();
}