Completed
Push — master ( 2cb17b...325b55 )
by Andrii
12:44
created

SaveReferralParams::getFromArray()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 13

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 13
rs 9.8333
c 0
b 0
f 0
cc 3
nc 3
nop 1
1
<?php
2
/**
3
 * Identity and Access Management server providing OAuth2, multi-factor authentication and more
4
 *
5
 * @link      https://github.com/hiqdev/hiam
6
 * @package   hiam
7
 * @license   BSD-3-Clause
8
 * @copyright Copyright (c) 2014-2018, HiQDev (http://hiqdev.com/)
9
 */
10
11
namespace hiam\mrdp\behaviors;
12
13
use hiam\mrdp\models\Identity;
14
use Yii;
15
use yii\base\Application;
16
use yii\base\Event;
17
use yii\web\Request;
18
19
/**
20
 * SaveReturnUrl behavior.
21
 *
22
 * @package hiam\behaviors
23
 */
24
class SaveReferralParams extends \yii\base\Behavior
25
{
26
    /**
27
     * @inheritDoc
28
     */
29
    public function events(): array
30
    {
31
        return [
32
            Application::EVENT_BEFORE_REQUEST => 'beforeRequest',
33
            Identity::EVENT_BEFORE_SAVE => 'beforeSave',
34
        ];
35
    }
36
37
    /**
38
     * @param Event $event
39
     */
40
    public function beforeRequest(Event $event): void
41
    {
42
        $request = Yii::$app->getRequest();
43
        $referralParams = $this->getFromQuery($request) ?: $this->getFromReferrer($request);
44
        if (!empty($referralParams)) {
45
            Yii::$app->session->set('referralParams', $referralParams);
46
        }
47
    }
48
49
    private function getFromQuery(Request $request)
50
    {
51
        $params = $request->getQueryParams();
52
53
        return $this->getFromArray($params);
54
    }
55
56
    private function getFromReferrer(Request $request)
57
    {
58
        parse_str(parse_url($request->getReferrer(), PHP_URL_QUERY), $params);
59
60
        return $this->getFromArray($params);
61
    }
62
63
    private function getFromArray(array $params)
64
    {
65
        $utmTags = [];
66
        foreach ($params as $name => $value) {
67
            if (strstr($name, 'utm_')) {
68
                $utmTags[$name] = $value;
69
            }
70
        }
71
        return array_filter([
72
            'referer' => $params['refid'],
73
            'utmTags' => $utmTags,
74
        ]);
75
    }
76
77
78
    public function beforeSave()
79
    {
80
        $this->owner->referralParams = \Yii::$app->session->get('referralParams');
81
    }
82
}
83