/** * ensure_folder_exists_and_is_writable * ensures that a folder exists and is writable, will attempt to create folder if it does not exist * Also ensures all the parent folders exist, and if not tries to create them. * Also, if this function creates the folder, adds a .htaccess file and index.html file * @param string $folder * @throws EE_Error if the folder exists and is writeable, but for some reason we * can't write to it * @return bool false if folder isn't writable; true if it exists and is writeable, */ public static function ensure_folder_exists_and_is_writable($folder = '') { if (empty($folder)) { return false; } // remove ending DS $folder = EEH_File::standardise_directory_separators(rtrim($folder, '/\\')); $parent_folder = EEH_File::get_parent_folder($folder); // add DS to folder $folder = EEH_File::end_with_directory_separator($folder); $wp_filesystem = EEH_File::_get_wp_filesystem($folder); if (!$wp_filesystem->is_dir(EEH_File::convert_local_filepath_to_remote_filepath($folder))) { //ok so it doesn't exist. Does its parent? Can we write to it? if (!EEH_File::ensure_folder_exists_and_is_writable($parent_folder)) { return false; } if (!EEH_File::verify_is_writable($parent_folder, 'folder')) { return false; } else { if (!$wp_filesystem->mkdir(EEH_File::convert_local_filepath_to_remote_filepath($folder))) { if (defined('WP_DEBUG') && WP_DEBUG) { $msg = sprintf(__('"%s" could not be created.', 'event_espresso'), $folder); $msg .= EEH_File::_permissions_error_for_unreadable_filepath($folder); throw new EE_Error($msg); } return false; } EEH_File::add_index_file($folder); } } elseif (!EEH_File::verify_is_writable($folder, 'folder')) { return false; } return true; }