1<?php 2 3/** 4 * webtrees: online genealogy 5 * Copyright (C) 2023 webtrees development team 6 * This program is free software: you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License as published by 8 * the Free Software Foundation, either version 3 of the License, or 9 * (at your option) any later version. 10 * This program is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 * GNU General Public License for more details. 14 * You should have received a copy of the GNU General Public License 15 * along with this program. If not, see <https://www.gnu.org/licenses/>. 16 */ 17 18declare(strict_types=1); 19 20namespace Fisharebest\Webtrees\Factories; 21 22use Fisharebest\Webtrees\Contracts\FilesystemFactoryInterface; 23use Fisharebest\Webtrees\Site; 24use League\Flysystem\Filesystem; 25use League\Flysystem\FilesystemOperator; 26use League\Flysystem\Local\LocalFilesystemAdapter; 27use League\Flysystem\PathPrefixing\PathPrefixedAdapter; 28 29use function realpath; 30 31/** 32 * Make a filesystem. 33 */ 34class FilesystemFactory implements FilesystemFactoryInterface 35{ 36 private const ROOT_DIR = __DIR__ . '/../..'; 37 38 /** 39 * Create a filesystem for the user's data folder. 40 * 41 * @param string $path_prefix 42 * 43 * @return FilesystemOperator 44 */ 45 public function data(string $path_prefix = ''): FilesystemOperator 46 { 47 $adapter = new LocalFilesystemAdapter(Site::getPreference('INDEX_DIRECTORY')); 48 49 if ($path_prefix !== '') { 50 $adapter = new PathPrefixedAdapter($adapter, $path_prefix); 51 } 52 53 return new Filesystem($adapter); 54 } 55 56 /** 57 * Describe a filesystem for the user's data folder. 58 * 59 * @return string 60 */ 61 public function dataName(): string 62 { 63 return Site::getPreference('INDEX_DIRECTORY'); 64 } 65 66 /** 67 * Create a filesystem for the application's root folder. 68 * 69 * @param string $path_prefix 70 * 71 * @return FilesystemOperator 72 */ 73 public function root(string $path_prefix = ''): FilesystemOperator 74 { 75 $adapter = new LocalFilesystemAdapter(self::ROOT_DIR); 76 77 if ($path_prefix !== '') { 78 $adapter = new PathPrefixedAdapter($adapter, $path_prefix); 79 } 80 81 return new Filesystem($adapter); 82 } 83 84 /** 85 * Describe a filesystem for the application's root folder. 86 * 87 * @return string 88 */ 89 public function rootName(): string 90 { 91 return realpath(self::ROOT_DIR) . '/'; 92 } 93} 94