Updated Drupal to 8.6. This goes with the following updates because it's possible...
[yaffs-website] / vendor / symfony / config / FileLocator.php
1 <?php
2
3 /*
4  * This file is part of the Symfony package.
5  *
6  * (c) Fabien Potencier <fabien@symfony.com>
7  *
8  * For the full copyright and license information, please view the LICENSE
9  * file that was distributed with this source code.
10  */
11
12 namespace Symfony\Component\Config;
13
14 use Symfony\Component\Config\Exception\FileLocatorFileNotFoundException;
15
16 /**
17  * FileLocator uses an array of pre-defined paths to find files.
18  *
19  * @author Fabien Potencier <fabien@symfony.com>
20  */
21 class FileLocator implements FileLocatorInterface
22 {
23     protected $paths;
24
25     /**
26      * @param string|array $paths A path or an array of paths where to look for resources
27      */
28     public function __construct($paths = array())
29     {
30         $this->paths = (array) $paths;
31     }
32
33     /**
34      * {@inheritdoc}
35      */
36     public function locate($name, $currentPath = null, $first = true)
37     {
38         if ('' == $name) {
39             throw new \InvalidArgumentException('An empty file name is not valid to be located.');
40         }
41
42         if ($this->isAbsolutePath($name)) {
43             if (!file_exists($name)) {
44                 throw new FileLocatorFileNotFoundException(sprintf('The file "%s" does not exist.', $name), 0, null, array($name));
45             }
46
47             return $name;
48         }
49
50         $paths = $this->paths;
51
52         if (null !== $currentPath) {
53             array_unshift($paths, $currentPath);
54         }
55
56         $paths = array_unique($paths);
57         $filepaths = $notfound = array();
58
59         foreach ($paths as $path) {
60             if (@file_exists($file = $path.\DIRECTORY_SEPARATOR.$name)) {
61                 if (true === $first) {
62                     return $file;
63                 }
64                 $filepaths[] = $file;
65             } else {
66                 $notfound[] = $file;
67             }
68         }
69
70         if (!$filepaths) {
71             throw new FileLocatorFileNotFoundException(sprintf('The file "%s" does not exist (in: %s).', $name, implode(', ', $paths)), 0, null, $notfound);
72         }
73
74         return $filepaths;
75     }
76
77     /**
78      * Returns whether the file path is an absolute path.
79      *
80      * @param string $file A file path
81      *
82      * @return bool
83      */
84     private function isAbsolutePath($file)
85     {
86         if ('/' === $file[0] || '\\' === $file[0]
87             || (\strlen($file) > 3 && ctype_alpha($file[0])
88                 && ':' === $file[1]
89                 && ('\\' === $file[2] || '/' === $file[2])
90             )
91             || null !== parse_url($file, PHP_URL_SCHEME)
92         ) {
93             return true;
94         }
95
96         return false;
97     }
98 }