Passed
Push — master ( a4e0f3...32db04 )
by Vasyl
02:04
created

VariableManager::get()   B

Complexity

Conditions 8
Paths 6

Size

Total Lines 30
Code Lines 18

Duplication

Lines 0
Ratio 0 %

Importance

Changes 5
Bugs 0 Features 1
Metric Value
eloc 18
c 5
b 0
f 1
dl 0
loc 30
rs 8.4444
cc 8
nc 6
nop 3
1
<?php
2
3
namespace Fomvasss\Variable;
4
5
/**
6
 * Class VariableManager
7
 *
8
 * @package \Fomvasss\Variable
9
 */
10
class VariableManager implements VariableManagerContract
11
{
12
    protected $app;
13
14
    protected $variableModel;
15
16
    protected $cacheRepository;
17
18
    protected $locale = null;
19
20
    protected $variables = null;
21
22
    /**
23
     * VariableManager constructor.
24
     * @param $cacheRepository
25
     * @param null $app
0 ignored issues
show
Documentation Bug introduced by
Are you sure the doc-type for parameter $app is correct as it would always require null to be passed?
Loading history...
26
     */
27
    public function __construct($variableModel, $cacheRepository, $app = null)
28
    {
29
        if (! $app) {
0 ignored issues
show
introduced by
$app is of type null, thus it always evaluated to false.
Loading history...
30
            $app = app();   //Fallback when $app is not given
0 ignored issues
show
Bug introduced by
The function app was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

30
            $app = /** @scrutinizer ignore-call */ app();   //Fallback when $app is not given
Loading history...
31
        }
32
        $this->app = $app;
33
34
        $this->config = $this->app['config']->get('variables');
0 ignored issues
show
Bug Best Practice introduced by
The property config does not exist. Although not strictly required by PHP, it is generally a best practice to declare properties explicitly.
Loading history...
35
36
        $this->variableModel = $variableModel;
37
38
        $this->cacheRepository = $cacheRepository;
39
    }
40
41
    /**
42
     * @param string $key
43
     * @param null $default
0 ignored issues
show
Documentation Bug introduced by
Are you sure the doc-type for parameter $default is correct as it would always require null to be passed?
Loading history...
44
     * @return mixed|null
45
     */
46
    public function get(string $key, $default = null, bool $useCache = true)
47
    {
48
        if ($useCache === false) {
49
            $var = $this->variableModel->where('key', $key)
50
                ->when($this->locale, function ($q) {
51
                    $q->where('locale', $this->locale);
52
                })
53
                ->first();
54
            return $var ? $var->value : $default;
55
        }
56
57
        if ($collection = $this->getCollection()) {
58
            if ($var = $collection
59
                ->where('key', $key)
60
                ->where('locale', $this->locale)
61
                ->first()) {
62
63
                return $var->value ?: $default;
64
            }
65
66
            if ($var = $collection
67
                ->where('key', $key)
68
                ->where('locale', null)
69
                ->first()) {
70
71
                return $var->value ?: $default;
72
            }
73
        }
74
75
        return $default;
76
    }
77
78
    public function set(string $key, $value = null, $locale = null)
79
    {
80
        return $this->variableModel->updateOrCreate([
81
            'key' => $key,
82
            'locale' => $locale ?: $this->locale,
83
        ], [
84
            'value' => $value,
85
        ]);
86
    }
87
88
    /**
89
     * @return array
90
     */
91
    public function all(): array
92
    {
93
        if ($all = $this->getCollection()) {
94
            $allByLocale = $this->locale ? $all->where('locale', $this->locale) : $all;
95
            $this->variables = $allByLocale->toArray();
96
        } else {
97
            $this->variables = [];
98
        }
99
100
        return $this->variables;
101
    }
102
103
    /**
104
     * @param string $locale
105
     * @return $this
106
     */
107
    public function locale(string $locale = null)
108
    {
109
        $this->locale = $locale;
110
111
        return $this;
112
    }
113
114
    public function cacheOff()
115
    {
116
117
    }
118
119
    public function cacheClear()
120
    {
121
        return $this->cacheRepository->forget($this->config['cache']['name']);
122
    }
123
124
    /**
125
     * @return |null
0 ignored issues
show
Documentation Bug introduced by
The doc comment |null at position 0 could not be parsed: Unknown type name '|' at position 0 in |null.
Loading history...
126
     */
127
    protected function getCollection()
128
    {
129
        try {
130
            return $this->cacheRepository->remember($this->config['cache']['name'], $this->config['cache']['time'], function () {
131
                return $this->variableModel->select('key', 'value', 'locale')->get();
132
            });
133
        } catch (\Exception $exception) {
134
            $this->app['log']->info(__CLASS__ . ': ' . $exception->getMessage());
135
136
            return false;
137
        }
138
    }
139
}
140