Passed
Push — master ( f832a0...f4b9df )
by Mikael
01:21
created

Configure2Trait::configure()   C

Complexity

Conditions 8
Paths 17

Size

Total Lines 35
Code Lines 20

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 72

Importance

Changes 0
Metric Value
dl 0
loc 35
ccs 0
cts 25
cp 0
rs 5.3846
c 0
b 0
f 0
cc 8
eloc 20
nc 17
nop 1
crap 72
1
<?php
2
3
namespace Anax\Configure;
4
5
/**
6
 * Trait implementing reading from config file and config directory
7
 * and storing options in $this->config.
8
 */
9
trait Configure2Trait
10
{
11
    /**
12
     * @var [] $config store the configuration in this array.
0 ignored issues
show
Documentation introduced by
The doc-type [] could not be parsed: Unknown type name "" at position 0. [(view supported doc-types)

This check marks PHPDoc comments that could not be parsed by our parser. To see which comment annotations we can parse, please refer to our documentation on supported doc-types.

Loading history...
13
     */
14
    protected $config = [];
15
16
17
18
    /**
19
     * Read configuration from file or array, if a file, first check in
20
     * ANAX_APP_PATH/config and then in ANAX_INSTALL_PATH/config.
21
     *
22
     * @param array|string $what is an array with key/value config options
23
     *                           or a file to be included which returns such
24
     *                           an array.
25
     *
26
     * @throws Exception when argument if not a file nor an array.
27
     *
28
     * @return self for chaining.
29
     */
30
    public function configure($what)
31
    {
32
        if (is_array($what)) {
33
            $this->config = $what;
34
            return $this;
35
        }
36
37
        $paths = [];
38
        if (defined("ANAX_APP_PATH")) {
39
            $paths[] = ANAX_APP_PATH . "/config/$what";
40
        }
41
42
        if (defined("ANAX_INSTALL_PATH")) {
43
            $paths[] = ANAX_INSTALL_PATH . "/config/$what";
44
        }
45
        $paths[] = $what;
46
47
        foreach ($paths as $path) {
48
            if (is_readable($path)) {
49
                $this->config = require $path;
50
51
                $parts = pathinfo($path);
52
                $dir = $parts["dirname"] . "/" . $parts["filename"];
53
                if (is_dir($dir)) {
54
                    foreach (glob("$dir/*.php") as $file) {
55
                        $this->config["items"][basename($file)] = require $file;
56
                    }
57
                }
58
59
                return $this;
60
            }
61
        }
62
63
        throw new Exception("Configure item '$what' is not an array nor a readable file.");
64
    }
65
66
67
68
    /**
69
     * Helper function for reading values from the configuration and appy
70
     * default values where configuration item is missing.
71
     *
72
     * @param string $key     matching a key in the config array.
73
     * @param string $default value returned when config item is not found.
74
     *
75
     * @return mixed or null if key does not exists.
76
     */
77
    public function getConfig($key, $default = null)
78
    {
79
        return isset($this->config[$key])
80
            ? $this->config[$key]
81
            : $default;
82
    }
83
}
84