]> BookStack Code Mirror - system-cli/blob - src/Services/AppLocator.php
155b8bb61d7a6aadc1886af34208af9b849de155
[system-cli] / src / Services / AppLocator.php
1 <?php declare(strict_types=1);
2
3 namespace Cli\Services;
4
5 use Phar;
6
7 class AppLocator
8 {
9     public static function search(string $directory = ''): string
10     {
11         $directoriesToSearch = $directory ? [Paths::resolve($directory)] : [
12             getcwd(),
13             static::getCliDirectory(),
14         ];
15
16         var_dump($directoriesToSearch);
17
18         foreach ($directoriesToSearch as $directory) {
19             if ($directory && static::isProbablyAppDirectory($directory)) {
20                 return $directory;
21             }
22         }
23
24         return '';
25     }
26
27     public static function require(string $directory = ''): string
28     {
29         $dir = static::search($directory);
30
31         if (!$dir) {
32             throw new \Exception('Could not find a valid BookStack installation');
33         }
34
35         return $dir;
36     }
37
38     protected static function getCliDirectory(): string
39     {
40         $scriptDir = dirname(__DIR__);
41
42         if (str_starts_with($scriptDir, 'phar://')) {
43             return dirname(Phar::running(false));
44         }
45
46         return dirname($scriptDir);
47     }
48
49     protected static function isProbablyAppDirectory(string $directory): bool
50     {
51         return file_exists($directory . DIRECTORY_SEPARATOR . 'version')
52             && file_exists($directory . DIRECTORY_SEPARATOR . 'package.json');
53     }
54 }