Passed
Branch 6.0 (c154c1)
by Olivier
11:35
created

TemplateResolverTrait::resolve_path()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 14
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 3
eloc 6
nc 3
nop 2
dl 0
loc 14
rs 9.4285
c 0
b 0
f 0
1
<?php
2
3
/*
4
 * This file is part of the ICanBoogie package.
5
 *
6
 * (c) Olivier Laviale <[email protected]>
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 ICanBoogie\Render;
13
14
use function basename;
15
use function dirname;
16
use function in_array;
17
use function strlen;
18
use function substr;
19
20
/**
21
 * Support functions for template resolvers.
22
 */
23
trait TemplateResolverTrait
24
{
25
    use ResolvePathTrait;
26
27
    /**
28
     * Resolves path tries.
29
     *
30
     * The method resolves a try path collection from a collection of roots, template name, and
31
     * extension collection.
32
     *
33
     * @param string[] $paths Template directories paths.
34
     * @param string $name Template name.
35
     * @param string[] $extensions Supported extensions.
36
     *
37
     * @return string[] A collection of candidate template pathnames.
38
     */
39
    protected function resolve_tries(array $paths, string $name, array $extensions): array
40
    {
41
        $extension = ExtensionResolver::resolve($name);
42
43
        if ($extension && in_array($extension, $extensions)) {
44
            $name = substr($name, 0, -strlen($extension));
45
        }
46
47
        $tries = [];
48
        $dirname = dirname($name);
49
        $basename = basename($name);
50
51
        foreach ($paths as $path) {
52
            $parent_dir = basename(dirname($path));
53
54
            foreach ($extensions as $extension) {
55
                $filename = $name;
56
57
                if ($dirname && $dirname == $parent_dir) {
58
                    $filename = $basename;
59
                }
60
61
                $filename = $filename . $extension;
62
                $pathname = $path . $filename;
63
64
                $tries[] = $pathname;
65
            }
66
        }
67
68
        return $tries;
69
    }
70
}
71