Config   A
last analyzed

Complexity

Total Complexity 18

Size/Duplication

Total Lines 121
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 0

Importance

Changes 0
Metric Value
dl 0
loc 121
rs 10
c 0
b 0
f 0
wmc 18
lcom 1
cbo 0

5 Methods

Rating   Name   Duplication   Size   Complexity  
B get() 0 20 8
A getAll() 0 4 1
A set() 0 17 4
A read() 0 9 3
A load() 0 10 2
1
<?php
2
/**
3
 * KumbiaPHP web & app Framework
4
 *
5
 * LICENSE
6
 *
7
 * This source file is subject to the new BSD license that is bundled
8
 * with this package in the file LICENSE.
9
 *
10
 * @category   Config
11
 *
12
 * @copyright  Copyright (c) 2005 - 2019 KumbiaPHP Team (http://www.kumbiaphp.com)
13
 * @license    https://github.com/KumbiaPHP/KumbiaPHP/blob/master/LICENSE   New BSD License
14
 */
15
16
/**
17
 * Clase para la carga de Archivos .INI y de configuración.
18
 *
19
 * Aplica el patrón Singleton que utiliza un array
20
 * indexado por el nombre del archivo para evitar que
21
 * un .ini de configuración sea leido mas de una
22
 * vez en runtime con lo que aumentamos la velocidad.
23
 *
24
 * @category   Kumbia
25
 */
26
class Config
27
{
28
    /**
29
     * Contain all the config
30
     * -
31
     * Contenido de variables de configuración.
32
     *
33
     * @var array
34
     */
35
    protected static $vars = [];
36
37
    /**
38
     * Get config vars
39
     * -
40
     * Obtiene configuración.
41
     *
42
     * @param string $var fichero.sección.variable
43
     *
44
     * @return mixed
45
     */
46
    public static function get($var)
47
    {
48
        $namespaces = explode('.', $var);
49
        if (!isset(self::$vars[$namespaces[0]])) {
50
            self::load($namespaces[0]);
51
        }
52
        switch (count($namespaces)) {
53
            case 3:
54
                return isset(self::$vars[$namespaces[0]][$namespaces[1]][$namespaces[2]]) ?
55
                             self::$vars[$namespaces[0]][$namespaces[1]][$namespaces[2]] : null;
56
            case 2:
57
                return isset(self::$vars[$namespaces[0]][$namespaces[1]]) ?
58
                             self::$vars[$namespaces[0]][$namespaces[1]] : null;
59
            case 1:
60
                return isset(self::$vars[$namespaces[0]]) ? self::$vars[$namespaces[0]] : null;
61
62
            default:
63
                trigger_error('Máximo 3 niveles en Config::get(fichero.sección.variable), pedido: '.$var);
64
        }
65
    }
66
67
    /**
68
     * Get all configs
69
     * -
70
     * Obtiene toda la configuración.
71
     *
72
     * @return array
73
     */
74
    public static function getAll()
75
    {
76
        return self::$vars;
77
    }
78
79
    /**
80
     * Set variable in config
81
     * -
82
     * Asigna un atributo de configuración.
83
     *
84
     * @param string $var   variable de configuración
85
     * @param mixed  $value valor para atributo
86
     * 
87
     * @return void
88
     */
89
    public static function set($var, $value)
90
    {
91
        $namespaces = explode('.', $var);
92
        switch (count($namespaces)) {
93
            case 3:
94
                self::$vars[$namespaces[0]][$namespaces[1]][$namespaces[2]] = $value;
95
                break;
96
            case 2:
97
                self::$vars[$namespaces[0]][$namespaces[1]] = $value;
98
                break;
99
            case 1:
100
                self::$vars[$namespaces[0]] = $value;
101
                break;
102
            default:
103
                trigger_error('Máximo 3 niveles en Config::set(fichero.sección.variable), pedido: '.$var);
104
        }
105
    }
106
107
    /**
108
     * Read config file
109
     * -
110
     * Lee y devuelve un archivo de configuración.
111
     *
112
     * @param string $file  archivo .php o .ini
113
     * @param bool   $force forzar lectura de .php o .ini
114
     *
115
     * @return array
116
     */
117
    public static function &read($file, $force = false)
118
    {
119
        if (isset(self::$vars[$file]) && !$force) {
120
            return self::$vars[$file];
121
        }
122
        self::load($file);
123
124
        return self::$vars[$file];
125
    }
126
127
    /**
128
     * Load config file
129
     * -
130
     * Lee un archivo de configuración.
131
     *
132
     * @param string $file archivo
133
     * 
134
     * @return void
135
     */
136
    private static function load($file)
137
    {
138
        if (file_exists(APP_PATH."config/$file.php")) {
139
            self::$vars[$file] = require APP_PATH."config/$file.php";
140
141
            return;
142
        }
143
        // sino carga el .ini
144
        self::$vars[$file] = parse_ini_file(APP_PATH."config/$file.ini", true);
145
    }
146
}
147