xref: /webtrees/app/Factories/FilesystemFactory.php (revision f117d295282d6129a796c4a62dd364e5c306c903)
1<?php
2
3/**
4 * webtrees: online genealogy
5 * Copyright (C) 2022 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 Fisharebest\Webtrees\Tree;
25use League\Flysystem\Filesystem;
26use League\Flysystem\FilesystemOperator;
27use League\Flysystem\Local\LocalFilesystemAdapter;
28use League\Flysystem\PathPrefixing\PathPrefixedAdapter;
29
30use function realpath;
31
32/**
33 * Make a filesystem.
34 */
35class FilesystemFactory implements FilesystemFactoryInterface
36{
37    private const ROOT_DIR = __DIR__ . '/../..';
38
39    /**
40     * Create a filesystem for the user's data folder.
41     *
42     * @param string $path_prefix
43     *
44     * @return FilesystemOperator
45     */
46    public function data(string $path_prefix = ''): FilesystemOperator
47    {
48        $folder  = Site::getPreference('INDEX_DIRECTORY');
49        $adapter = new LocalFilesystemAdapter($folder);
50
51        if ($path_prefix !== '') {
52            $adapter = new PathPrefixedAdapter($adapter, $path_prefix);
53        }
54
55        return new Filesystem($adapter);
56    }
57
58    /**
59     * Describe a filesystem for the user's data folder.
60     *
61     * @return string
62     */
63    public function dataName(): string
64    {
65        return Site::getPreference('INDEX_DIRECTORY');
66    }
67
68    /**
69     * Create a filesystem for a tree's media folder.
70     *
71     * @param Tree $tree
72     *
73     * @return FilesystemOperator
74     *
75     * @deprecated - Will be removed in webtrees 2.2.  Use mediaFilesystem() directly.
76     */
77    public function media(Tree $tree): FilesystemOperator
78    {
79        return $tree->mediaFilesystem();
80    }
81
82    /**
83     * Create a filesystem for the application's root folder.
84     *
85     * @param string $path_prefix
86     *
87     * @return FilesystemOperator
88     */
89    public function root(string $path_prefix = ''): FilesystemOperator
90    {
91        $folder     = self::ROOT_DIR;
92        $adapter    = new LocalFilesystemAdapter($folder);
93
94        if ($path_prefix !== '') {
95            $adapter = new PathPrefixedAdapter($adapter, $path_prefix);
96        }
97
98        return new Filesystem($adapter);
99    }
100
101    /**
102     * Describe a filesystem for the application's root folder.
103     *
104     * @return string
105     */
106    public function rootName(): string
107    {
108        return realpath(self::ROOT_DIR) . '/';
109    }
110}
111