Completed
Push — develop ( 856b14...45ab37 )
by Nate
17:44
created

Settings::setEnvironment()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
dl 0
loc 5
ccs 0
cts 3
cp 0
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 1
crap 2
1
<?php
2
3
/**
4
 * @copyright  Copyright (c) Flipbox Digital Limited
5
 * @license    https://flipboxfactory.com/software/patron/license
6
 * @link       https://www.flipboxfactory.com/software/patron/
7
 */
8
9
namespace flipbox\patron\models;
10
11
use Craft;
12
use craft\base\Model;
13
use craft\helpers\StringHelper;
14
use craft\validators\UriValidator;
15
use flipbox\ember\helpers\ModelHelper;
16
use flipbox\ember\helpers\UrlHelper;
17
use flipbox\ember\views\Template;
18
use flipbox\ember\views\ViewInterface;
19
use yii\base\Exception;
20
21
/**
22
 * @author Flipbox Factory <[email protected]>
23
 * @since 1.0.0
24
 */
25
class Settings extends Model
26
{
27
    /**
28
     * The callback url path
29
     */
30
    const DEFAULT_CALLBACK_URL_PATH = 'patron/authorization/callback';
31
32
    /**
33
     * Tge callback url route
34
     */
35
    const DEFAULT_CALLBACK_ROUTE = self::DEFAULT_CALLBACK_URL_PATH;
36
37
    /**
38
     * @var string|null
39
     */
40
    private $callbackUrlPath;
41
42
    /**
43
     * @var string
44
     */
45
    private $providerOverrideFileName = 'providers';
46
47
    /**
48
     * @var array
49
     */
50
    private $environments = [];
51
52
    /**
53
     * @var string
54
     */
55
    private $environment = null;
56
57
    /**
58
     * Encrypt data in storage
59
     *
60
     * @var bool
61
     */
62
    public $encryptStorageData = true;
63
64
    /**
65
     * @var array
66
     */
67
    private $defaultEnvironments = [];
68
69
    /**
70
     * @var bool
71
     */
72
    public $applyProviderEnvironmentsToToken = true;
73
74
    /*******************************************
75
     * ENVIRONMENTS
76
     *******************************************/
77
78
    /**
79
     * @return string
80
     */
81
    public function getEnvironment(): string
82
    {
83
        if ($this->environment === null) {
84
            $this->environment = Craft::$app->getConfig()->env;
85
        }
86
87
        return $this->environment;
88
    }
89
90
    /**
91
     * @param string $environment
92
     * @return $this
93
     */
94
    public function setEnvironment(string $environment)
95
    {
96
        $this->environment = $environment;
97
        return $this;
98
    }
99
100
    /**
101
     * @return array
102
     */
103 18
    public function getEnvironments(): array
104
    {
105 18
        if (empty($this->environments)) {
106 18
            $this->environments[] = Craft::$app->getConfig()->env;
107
        }
108
109 18
        return $this->environments;
110
    }
111
112
    /**
113
     * @param array $environments
114
     * @return $this
115
     */
116
    public function setEnvironments(array $environments)
117
    {
118
        $this->environments = $environments;
119
        return $this;
120
    }
121
122
    /**
123
     * @return array
124
     */
125 18
    public function getDefaultEnvironments(): array
126
    {
127 18
        if (empty($this->defaultEnvironments)) {
128 18
            $this->defaultEnvironments[] = Craft::$app->getConfig()->env;
129
        }
130
131 18
        return array_intersect(
132 18
            $this->getEnvironments(),
133 18
            $this->defaultEnvironments
134
        );
135
    }
136
137
    /**
138
     * @param array $environments
139
     * @return $this
140
     */
141
    public function setDefaultEnvironments(array $environments)
142
    {
143
        $this->defaultEnvironments = $environments;
144
        return $this;
145
    }
146
147
    /*******************************************
148
     * PROVIDER OVERRIDE CONFIG
149
     *******************************************/
150
151
    /**
152
     * @param string $providerOverrideFileName
153
     * @return string
154
     */
155
    public function setProviderOverrideFileName(string $providerOverrideFileName): string
156
    {
157
        $this->providerOverrideFileName = $providerOverrideFileName;
158
        return $this;
159
    }
160
161
    /**
162
     * @return string
163
     */
164
    public function getProviderOverrideFileName(): string
165
    {
166
        return $this->providerOverrideFileName;
167
    }
168
169
    /*******************************************
170
     * CALLBACK
171
     *******************************************/
172
173
    /**
174
     * @return string
175
     */
176
    public function getCallbackUrl(): string
177
    {
178
        try {
179
            if ($this->callbackUrlPath === null) {
180
                return UrlHelper::siteActionUrl(self::DEFAULT_CALLBACK_URL_PATH);
181
            }
182
183
            return UrlHelper::siteUrl($this->callbackUrlPath);
184
        } catch (Exception $e) {
185
            if ($this->callbackUrlPath === null) {
186
                return UrlHelper::actionUrl(self::DEFAULT_CALLBACK_URL_PATH);
187
            }
188
189
            return UrlHelper::url($this->callbackUrlPath);
190
        }
191
    }
192
193
    /**
194
     * @param $callbackUrlPath
195
     * @return $this
196
     * @throws \yii\base\Exception
197
     */
198
    public function setCallbackUrlPath($callbackUrlPath)
199
    {
200
        $callbackUrlPath = trim(
201
            StringHelper::removeLeft(
202
                (string)$callbackUrlPath,
203
                UrlHelper::siteUrl()
204
            ),
205
            ' /'
206
        );
207
208
        $this->callbackUrlPath = empty($callbackUrlPath) ? null : $callbackUrlPath;
209
210
        return $this;
211
    }
212
213
    /**
214
     * @return string|null
215
     */
216
    public function getCallbackUrlPath()
217
    {
218
        return $this->callbackUrlPath;
219
    }
220
221
    /**
222
     * @return array|null
223
     */
224
    public function getCallbackUrlRule()
225
    {
226
        if ($path = $this->callbackUrlPath) {
227
            return [
228
                $path => self::DEFAULT_CALLBACK_ROUTE
229
            ];
230
        }
231
        return null;
232
    }
233
234
235
    /*******************************************
236
     * PROVIDER SETTINGS VIEW (not currently editable)
237
     *******************************************/
238
239
    /**
240
     * @return ViewInterface
241
     */
242
    public function getProviderEnvironmentView(): ViewInterface
243
    {
244
        return new Template([
245
            'template' => 'patron/_cp/provider/_environment'
246
        ]);
247
    }
248
249
    /**
250
     * @return ViewInterface
251
     */
252
    public function getProviderSettingsView(): ViewInterface
253
    {
254
        return new Template([
255
            'template' => 'patron/_cp/provider/_settings'
256
        ]);
257
    }
258
259
    /**
260
     * @return ViewInterface
261
     */
262
    public function getTokenView(): ViewInterface
263
    {
264
        return new Template([
265
            'template' => 'patron/_modal/token'
266
        ]);
267
    }
268
269
270
    /**
271
     * @inheritdoc
272
     */
273
    public function rules()
274
    {
275
        return array_merge(
276
            parent::rules(),
277
            [
278
                [
279
                    [
280
                        'callbackUrlPath'
281
                    ],
282
                    UriValidator::class
283
                ],
284
                [
285
                    [
286
                        'encryptStorageData'
287
                    ],
288
                    'boolean'
289
                ],
290
                [
291
                    [
292
                        'encryptStorageData',
293
                        'callbackUrlPath'
294
                    ],
295
                    'safe',
296
                    'on' => [
297
                        ModelHelper::SCENARIO_DEFAULT
298
                    ]
299
                ]
300
            ]
301
        );
302
    }
303
304
    /**
305
     * @inheritdoc
306
     */
307
    public function attributes()
308
    {
309
        return array_merge(
310
            parent::attributes(),
311
            [
312
                'callbackUrlPath',
313
                'defaultEnvironments',
314
                'environments',
315
                'environment'
316
            ]
317
        );
318
    }
319
320
    /**
321
     * @inheritdoc
322
     */
323
    public function attributeLabels()
324
    {
325
        return array_merge(
326
            parent::attributeLabels(),
327
            [
328
                'callbackUrlPath' => Craft::t('patron', 'Callback Url Path'),
329
            ]
330
        );
331
    }
332
}
333