Passed
Push — master ( f4b9df...81b7eb )
by Mikael
01:29
created

Configure2Trait::configure()   D

Complexity

Conditions 9
Paths 37

Size

Total Lines 40
Code Lines 24

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 90

Importance

Changes 0
Metric Value
dl 0
loc 40
ccs 0
cts 30
cp 0
rs 4.909
c 0
b 0
f 0
cc 9
eloc 24
nc 37
nop 1
crap 90
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
        $found = false;
48
        foreach ($paths as $path) {
49
            if (is_readable($path)) {
50
                $found = true;
51
                $this->config = require $path;
52
            }
53
54
            $parts = pathinfo($path);
55
            $dir = $parts["dirname"] . "/" . $parts["filename"];
56
            if (is_dir($dir)) {
57
                foreach (glob("$dir/*.php") as $file) {
58
                    $found = true;
59
                    $this->config["items"][basename($file)] = require $file;
60
                }
61
            }
62
63
            if ($found) {
64
                return $this;
65
            }
66
        }
67
68
        throw new Exception("Configure item '$what' is not an array nor a readable file.");
69
    }
70
71
72
73
    /**
74
     * Helper function for reading values from the configuration and appy
75
     * default values where configuration item is missing.
76
     *
77
     * @param string $key     matching a key in the config array.
78
     * @param string $default value returned when config item is not found.
79
     *
80
     * @return mixed or null if key does not exists.
81
     */
82
    public function getConfig($key, $default = null)
83
    {
84
        return isset($this->config[$key])
85
            ? $this->config[$key]
86
            : $default;
87
    }
88
}
89