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