1 system.module system_check_directory($form_element)

Checks the existence of the directory specified in $form_element.

This function is called from the system_settings form to check all core file directories (file_public_path, file_private_path, file_temporary_path).

Parameters

$form_element: The form element containing the name of the directory to check.

File

core/modules/system/system.module, line 2842
Configuration system that lets administrators modify the workings of the site.

Code

function system_check_directory($form_element) {
  $directory = $form_element['#value'];
  if (strlen($directory) == 0) {
    return $form_element;
  }

  // Safety-check that a protected system path is not used as an upload path
  // that could result in system files getting overwritten.
  $real_path = backdrop_realpath($directory);
  $unsafe_directories = file_unsafe_directories();

  foreach ($unsafe_directories as $unsafe_directory) {
    $is_wildcard = (substr($unsafe_directory, -2) == '/*');
    $unsafe_directory = ($is_wildcard) ? substr($unsafe_directory, 0, -2) : $unsafe_directory;
    $unsafe_real_path = backdrop_realpath($unsafe_directory);

    // Match the directory itself, and if a wildcard is present, any child
    // directories of an unsafe directory.
    if (($real_path === $unsafe_real_path) || ($is_wildcard && strpos($real_path, $unsafe_real_path) === 0)) {
      form_set_error($form_element['#parents'][0], t('The directory %directory is not allowed to be an upload destination.', array('%directory' => $directory)));
      return $form_element;
    }
  }

  if (!is_dir($directory) && !backdrop_mkdir($directory, NULL, TRUE)) {
    // If the directory does not exist and cannot be created.
    form_set_error($form_element['#parents'][0], t('The directory %directory does not exist and could not be created.', array('%directory' => $directory)));
    watchdog('file system', 'The directory %directory does not exist and could not be created.', array('%directory' => $directory), WATCHDOG_ERROR);
  }

  if (is_dir($directory) && !is_writable($directory) && !backdrop_chmod($directory)) {
    // If the directory is not writable and cannot be made so.
    form_set_error($form_element['#parents'][0], t('The directory %directory exists but is not writable and could not be made writable.', array('%directory' => $directory)));
    watchdog('file system', 'The directory %directory exists but is not writable and could not be made writable.', array('%directory' => $directory), WATCHDOG_ERROR);
  }
  elseif (is_dir($directory) && backdrop_is_apache()) {
    if ($form_element['#name'] == 'file_public_path') {
      // Create public .htaccess file.
      file_save_htaccess($directory, FALSE);
    }
    else {
      // Create private .htaccess file.
      file_save_htaccess($directory);
    }
  }

  return $form_element;
}