Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 15
0.00% covered (danger)
0.00%
0 / 2
CRAP
0.00% covered (danger)
0.00%
0 / 1
PathConverter
0.00% covered (danger)
0.00%
0 / 15
0.00% covered (danger)
0.00%
0 / 2
42
0.00% covered (danger)
0.00%
0 / 1
 normalize
0.00% covered (danger)
0.00%
0 / 3
0.00% covered (danger)
0.00%
0 / 1
2
 convert
0.00% covered (danger)
0.00%
0 / 12
0.00% covered (danger)
0.00%
0 / 1
30
1<?php
2
3/**
4 * CSS path converter extension
5 *
6 * PHP version 8
7 *
8 * Copyright (C) The National Library of Finland 2017.
9 *
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License version 2,
12 * as published by the Free Software Foundation.
13 *
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17 * GNU General Public License for more details.
18 *
19 * You should have received a copy of the GNU General Public License
20 * along with this program; if not, write to the Free Software
21 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
22 *
23 * @category VuFind
24 * @package  View_Helpers
25 * @author   Ere Maijala <ere.maijala@helsinki.fi>
26 * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
27 * @link     https://vufind.org/wiki/development Wiki
28 */
29
30namespace VuFindTheme\Minify;
31
32/**
33 * CSS path converter extension
34 *
35 * @category VuFind
36 * @package  View_Helpers
37 * @author   Ere Maijala <ere.maijala@helsinki.fi>
38 * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
39 * @link     https://vufind.org/wiki/development Wiki
40 */
41class PathConverter extends \MatthiasMullie\PathConverter\Converter
42{
43    /**
44     * Normalize path.
45     *
46     * @param string $path Path
47     *
48     * @return string
49     */
50    protected function normalize($path)
51    {
52        $path = parent::normalize($path);
53
54        $path = str_replace('/local/cache/public', '/cache', $path);
55
56        return $path;
57    }
58
59    /**
60     * Convert paths relative to the themes directory.
61     *
62     * Takes advantage of the fact that we know the themes directory will be
63     * '../themes' relative to the cache directory. This allows path resolution to
64     * work regardless of whether there are symlinked directories or other
65     * differences between the actual file system path and the path used to access
66     * the theme files.
67     *
68     * @param string $path The relative path that needs to be converted
69     *
70     * @return string The new relative path
71     */
72    public function convert($path)
73    {
74        $path = $this->from . '/' . $path;
75        $path = preg_replace('/.*?\/themes\//', '../themes/', $path);
76
77        // Remove .. parts in the middle of the resulting path:
78        $parts = explode('/', $path);
79        $result = [];
80        $last = '';
81        foreach ($parts as $part) {
82            if ('' !== $last && '..' !== $last && '..' === $part) {
83                array_pop($result);
84                continue;
85            }
86            $last = $part;
87            $result[] = $part;
88        }
89
90        return implode('/', $result);
91    }
92}