OneSignal   A
last analyzed

Complexity

Total Complexity 8

Size/Duplication

Total Lines 82
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 32
c 1
b 0
f 0
dl 0
loc 82
rs 10
wmc 8

3 Methods

Rating   Name   Duplication   Size   Complexity  
A init() 0 9 2
A __get() 0 13 4
A log() 0 4 2
1
<?php
2
3
namespace vasadibt\onesignal;
4
5
use GuzzleHttp\Client;
6
use vasadibt\onesignal\resolver\ResolverFactory;
7
use vasadibt\onesignal\service\Apps;
8
use vasadibt\onesignal\service\Devices;
9
use vasadibt\onesignal\service\Notifications;
10
use vasadibt\onesignal\service\Request;
11
use Yii;
12
use yii\base\Component;
13
use yii\log\FileTarget;
14
15
/**
16
 * @property-read Apps $apps          Applications API service
17
 * @property-read Devices $devices       Devices API service
18
 * @property-read Notifications $notifications Notifications API service
19
 */
20
class OneSignal extends Component
21
{
22
    public $apiUrl = 'https://onesignal.com/api/v1';
23
    public $appId;
24
    public $appAuthKey;
25
    public $userAuthKey;
26
    public $enabled = true;
27
    /**
28
     * @var bool
29
     */
30
    public $log = true;
31
    /**
32
     * @var bool
33
     */
34
    public $logTarget = [
35
        'class' => '\yii\log\FileTarget',
36
        'logFile' => '@runtime/logs/onesignal.log',
37
        'categories' => ['vasadibt\onesignal\*'],
38
        'logVars' => [],
39
    ];
40
41
    /**
42
     * @var Client|array
43
     */
44
    public $client;
45
46
    /**
47
     * @var array
48
     */
49
    private $services = [
50
        'apps' => 'vasadibt\onesignal\service\Apps',
51
        'devices' => 'vasadibt\onesignal\service\Devices',
52
        'notifications' => 'vasadibt\onesignal\service\Notifications',
53
    ];
54
55
    /**
56
     * {@inheritdoc}
57
     */
58
    public function init()
59
    {
60
        $this->client = new Client([
61
            'verify' => false,
62
            'debug' => false
63
        ]);
64
65
        if (!empty($this->logTarget)) {
66
            Yii::$app->getLog()->targets['onesignal'] = Yii::createObject($this->logTarget);
67
        }
68
    }
69
70
    /**
71
     * Create required services on the fly.
72
     *
73
     * @param string $name
74
     *
75
     * @return \vasadibt\onesignal\service\Request
76
     * @throws \yii\base\InvalidConfigException
77
     * @throws \yii\base\UnknownPropertyException
78
     */
79
    public function __get($name)
80
    {
81
        if (array_key_exists($name, $this->services)) {
82
            if (!is_object($this->services[$name])) {
83
                $this->services[$name] = Yii::createObject([
84
                    'class' => $this->services[$name],
85
                    'api' => $this,
86
                    'basicAuthKey' => ($name == 'apps' ? $this->userAuthKey : $this->appAuthKey),
87
                ]);
88
            }
89
            return $this->services[$name];
90
        }
91
        return parent::__get($name);
92
    }
93
94
    /**
95
     * @param $message
96
     * @param $category
97
     */
98
    public function log($message, $category = 'vasadibt\onesignal')
99
    {
100
        if($this->log){
101
            Yii::info($message, $category);
102
        }
103
    }
104
}
105