Passed
Push — master ( cbeb6d...052d75 )
by Esteban De La Fuente
11:37 queued 03:06
created

PathManager::getTemplatesPath()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

Changes 0
Metric Value
cc 1
eloc 1
nc 1
nop 0
dl 0
loc 3
ccs 2
cts 2
cp 1
crap 1
rs 10
c 0
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
/**
6
 * LibreDTE: Biblioteca PHP (Núcleo).
7
 * Copyright (C) LibreDTE <https://www.libredte.cl>
8
 *
9
 * Este programa es software libre: usted puede redistribuirlo y/o modificarlo
10
 * bajo los términos de la Licencia Pública General Affero de GNU publicada por
11
 * la Fundación para el Software Libre, ya sea la versión 3 de la Licencia, o
12
 * (a su elección) cualquier versión posterior de la misma.
13
 *
14
 * Este programa se distribuye con la esperanza de que sea útil, pero SIN
15
 * GARANTÍA ALGUNA; ni siquiera la garantía implícita MERCANTIL o de APTITUD
16
 * PARA UN PROPÓSITO DETERMINADO. Consulte los detalles de la Licencia Pública
17
 * General Affero de GNU para obtener una información más detallada.
18
 *
19
 * Debería haber recibido una copia de la Licencia Pública General Affero de
20
 * GNU junto a este programa.
21
 *
22
 * En caso contrario, consulte <http://www.gnu.org/licenses/agpl.html>.
23
 */
24
25
namespace libredte\lib\Core\Service;
26
27
/**
28
 * Clase para administrar las rutas que utiliza la biblioteca para sus
29
 * archivos.
30
 */
31
class PathManager
32
{
33
    /**
34
     * Ubicación base, es la ruta donde está la biblioteca.
35
     */
36
    private const BASE_PATH = __DIR__ . '/../..';
37
38
    /**
39
     * Ubicación de los recursos.
40
     */
41
    private const RESOURCES_PATH = self::BASE_PATH . '/resources';
42
43
    /**
44
     * Ubicación de los tests.
45
     */
46
    private const TESTS_PATH = self::BASE_PATH . '/tests';
47
48
    /**
49
     * Ubicación de los datos variables que puede escribir la biblioteca en su
50
     * ciclo de ejecución normal.
51
     */
52
    private const VAR_PATH = self::BASE_PATH . '/var';
53
54
    /**
55
     * Ubicación de los certificados dentro del directorio de recursos.
56
     */
57
    private const CERTIFICATES_PATH = self::RESOURCES_PATH . '/certificates';
58
59
    /**
60
     * Ubicación de los archivos PHP de datos dentro del directorio de recursos.
61
     */
62
    private const DATA_PATH = self::RESOURCES_PATH . '/data';
63
64
    /**
65
     * Ubicación de los esquemas XML dentro del directorio de recursos.
66
     */
67
    private const SCHEMAS_PATH = self::RESOURCES_PATH . '/schemas';
68
69
    /**
70
     * Ubicación de las plantillas dentro del directorio de recursos.
71
     */
72
    private const TEMPLATES_PATH = self::RESOURCES_PATH . '/templates';
73
74
    /**
75
     * Ubicación de los WSDL de API SOAP dentro del directorio de recursos.
76
     */
77
    private const WSDL_PATH = self::RESOURCES_PATH . '/wsdl';
78
79
    /**
80
     * Ubicación del directorio de caché dentro del directorio de datos
81
     * variables.
82
     */
83
    private const CACHE_PATH = self::VAR_PATH . '/cache';
84
85
    /**
86
     * Obtiene la ruta completa del directorio de certificados o de un
87
     * certificado en específico si fue pasado.
88
     *
89
     * @param string $filename Nombre del archivo del certificado.
90
     * @return string|null Ubicación del certificado o `null` si no se encontró.
91
     */
92 1
    public static function getCertificatesPath(?string $filename = null): ?string
93
    {
94 1
        if ($filename === null) {
95 1
            return realpath(self::CERTIFICATES_PATH);
96
        }
97
98 1
        $filepath = sprintf('%s/%s', self::CERTIFICATES_PATH, $filename);
99 1
        return self::checkFilepath($filepath);
100
    }
101
102
    /**
103
     * Obtiene la ruta completa de un archivo PHP de datos.
104
     *
105
     * @param string $key Clave del archivo de datos.
106
     * @return string|null Ubicación del archivo o `null` si no se encontró.
107
     */
108 345
    public static function getDataPath(string $key): ?string
109
    {
110 345
        $filepath = sprintf('%s/%s.php', self::DATA_PATH, $key);
111 345
        return self::checkFilepath($filepath);
112
    }
113
114
    /**
115
     * Obtiene la ruta completa del directorio de esquemas XML o de un
116
     * esquema XML en específico si fue pasado.
117
     *
118
     * @param string $filename Nombre del archivo del esquema XML.
119
     * @return string|null Ubicación del esquema XML o `null` si no se encontró.
120
     */
121 49
    public static function getSchemasPath(?string $filename = null): ?string
122
    {
123 49
        if ($filename === null) {
124
            return realpath(self::SCHEMAS_PATH);
125
        }
126
127 49
        $filepath = sprintf('%s/%s', self::SCHEMAS_PATH, $filename);
128 49
        return self::checkFilepath($filepath);
129
    }
130
131
    /**
132
     * Obtiene la ruta completa del directorio de plantillas.
133
     *
134
     * @return string
135
     */
136 98
    public static function getTemplatesPath(): string
137
    {
138 98
        return realpath(self::TEMPLATES_PATH);
139
    }
140
141
    /**
142
     * Obtiene la ruta completa a un archivo WSDL en el almacenamiento local.
143
     *
144
     * @param string $server Servidor del SII al que se busca un WSDL.
145
     * @param string $service Servicio para el que se busca su WSDL.
146
     * @return string|null Ubicación del WSDL o `null` si no se encontró.
147
     */
148 1
    public static function getWsdlPath(string $server, string $service): ?string
149
    {
150 1
        $filepath = sprintf('%s/%s/%s.wsdl', self::WSDL_PATH, $server, $service);
151 1
        return self::checkFilepath($filepath);
152
    }
153
154
    /**
155
     * Obtiene la ruta completa del directorio de caché.
156
     *
157
     * @return string
158
     */
159
    public static function getCachePath(): string
160
    {
161
        return realpath(self::CACHE_PATH);
162
    }
163
164
    /**
165
     * Obtiene la ruta completa del directorio de pruebas.
166
     *
167
     * @return string
168
     */
169 13
    public static function getTestsPath(): string
170
    {
171 13
        return realpath(self::TESTS_PATH);
172
    }
173
174
    /**
175
     * Valida que una ruta a un archivo se pueda leer (y por ende que exista).
176
     *
177
     * @param string $filepath Ruta completa al archivo a verificar.
178
     * @return string|null Ruta al archivo si es válida o `null` si no lo es.
179
     */
180 348
    private static function checkFilepath(string $filepath): ?string
181
    {
182 348
        return is_readable($filepath) ? realpath($filepath) : null;
183
    }
184
}
185