Ejemplo n.º 1
0
 /**
  * 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;
 }