You are here

public static function FilebrowserManager::validateFolderPath in Filebrowser 3.x

Same name and namespace in other branches
  1. 8.2 src/FilebrowserManager.php \Drupal\filebrowser\FilebrowserManager::validateFolderPath()

File

src/FilebrowserManager.php, line 397

Class

FilebrowserManager

Namespace

Drupal\filebrowser

Code

public static function validateFolderPath($element, FormStateInterface $form_state) {
  $folder_path = $form_state
    ->getValue('filebrowser')['folder_path'];

  /** @var \Drupal\Core\StreamWrapper\StreamWrapperManager $stream_wrapper_manager */
  $stream_wrapper_manager = \Drupal::service('stream_wrapper_manager');
  $scheme = $stream_wrapper_manager::getScheme($folder_path);
  $error = false;
  $message = '';

  // Scheme is valid?
  if (!$scheme || !$stream_wrapper_manager
    ->isValidScheme($scheme)) {
    $message = t('The scheme: %scheme in your uri is not valid.', [
      '%scheme' => $scheme,
    ]);
    $error = true;
    $form_state
      ->setError($element, $message);
  }

  // is directory name contains illegal characters?
  if (strpbrk($folder_path, "\\/?%*:|\"<>") === TRUE) {
    $message = t('This @name contains illegal characters.', [
      'name => $folder_path',
    ]);
    $error = true;
    $form_state
      ->setError($element, $message);
  }
  if (!$error) {

    // name is safe, create the folder if it doesn't exists.
    if (!file_exists($folder_path)) {
      if (\Drupal::service('file_system')
        ->mkdir($folder_path, NULL, TRUE, NULL)) {
        $message = t('Folder location @uri created.', [
          '@uri' => $folder_path,
        ]);
        \Drupal::messenger()
          ->addMessage($message);
      }
      else {
        $error = true;
        $message = t('@url does not exist and Filebrowser can not create it.', [
          '@url' => $folder_path,
        ]);
        $form_state
          ->setError($element, $message);
      }
    }
  }
  return [
    'error' => $error,
    'error_msg' => $message,
  ];
}