. */ declare(strict_types=1); namespace Fisharebest\Webtrees\Factories; use Fisharebest\Webtrees\Contracts\FilesystemFactoryInterface; use Fisharebest\Webtrees\Site; use League\Flysystem\Filesystem; use League\Flysystem\FilesystemOperator; use League\Flysystem\Local\LocalFilesystemAdapter; use League\Flysystem\PathPrefixing\PathPrefixedAdapter; use function realpath; /** * Make a filesystem. */ class FilesystemFactory implements FilesystemFactoryInterface { private const ROOT_DIR = __DIR__ . '/../..'; /** * Create a filesystem for the user's data folder. * * @param string $path_prefix * * @return FilesystemOperator */ public function data(string $path_prefix = ''): FilesystemOperator { $adapter = new LocalFilesystemAdapter(Site::getPreference('INDEX_DIRECTORY')); if ($path_prefix !== '') { $adapter = new PathPrefixedAdapter($adapter, $path_prefix); } return new Filesystem($adapter); } /** * Describe a filesystem for the user's data folder. * * @return string */ public function dataName(): string { return Site::getPreference('INDEX_DIRECTORY'); } /** * Create a filesystem for the application's root folder. * * @param string $path_prefix * * @return FilesystemOperator */ public function root(string $path_prefix = ''): FilesystemOperator { $adapter = new LocalFilesystemAdapter(self::ROOT_DIR); if ($path_prefix !== '') { $adapter = new PathPrefixedAdapter($adapter, $path_prefix); } return new Filesystem($adapter); } /** * Describe a filesystem for the application's root folder. * * @return string */ public function rootName(): string { return realpath(self::ROOT_DIR) . '/'; } }