Completed
Push — master ( 9b1a26...70b50e )
by Alexey
02:15
created

SocialLikes.php (3 issues)

Labels
Severity

Upgrade to new PHP Analysis Engine

These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more

1
<?php
2
3
namespace dominus77\sociallikesnext;
4
5
use yii\web\View;
6
use yii\web\JsExpression;
7
use yii\helpers\Json;
8
use yii\helpers\Html;
9
use dominus77\sociallikesnext\assets\SocialLikesAsset;
10
11
/**
12
 * Class SocialLikes
13
 * @package dominus77\sociallikesnext
14
 */
15
class SocialLikes extends \yii\base\Widget
16
{
17
    const THEME_FLAT = 'flat';
18
    const THEME_LIGHT = 'light';
19
    const THEME_BIRMAN = 'birman';
20
21
    /**
22
     * Theme buttons
23
     * @var string flat, light, birman
24
     */
25
    public $theme = 'flat';
26
27
    /**
28
     * Display name of social networks, default true
29
     * @var bool
30
     */
31
    public $title = true;
32
33
    /**
34
     * @var array
35
     */
36
    public $items = [];
37
38
    /**
39
     * @var array
40
     */
41
    public $containerOptions = [];
42
43
    /**
44
     * @var array
45
     */
46
    public $clientOptions = [];
47
48
    /**
49
     * @var array
50
     */
51
    public $clientButtons = [];
52
53
    /**
54
     * @var string
55
     */
56
    public $clientCss = '';
57
58
    /**
59
     * @var string
60
     */
61
    public $id;
62
63
    /**
64
     * Initializes the widget
65
     */
66 2
    public function init()
67
    {
68 2
        parent::init();
69 2
        $this->id = $this->id ? $this->id : $this->getId();
70 2
        $this->registerAssets();
71
        $containerOptions = [
72 2
            'id' => $this->id,
73
        ];
74 2
        $this->containerOptions = array_merge($this->containerOptions, $containerOptions);
75 2
        $this->containerOptions['class'] = (isset($this->containerOptions['class']) && !empty($this->containerOptions['class'])) ?
76 1
            $this->theme . ' social-likes ' . $this->containerOptions['class'] :
77 1
            $this->theme . ' social-likes';
78 2
    }
79
80
    /**
81
     * Run widget
82
     * @return string|void
83
     */
84 1
    public function run()
85
    {
86 1
        if (!empty($this->items)) {
87 1
            echo Html::beginTag('div', $this->containerOptions) . PHP_EOL;
88 1
            $this->renderItems($this->items);
89 1
            echo Html::endTag('div') . PHP_EOL;
90
        }
91 1
    }
92
93
    /**
94
     * Render items
95
     * @param array $items
96
     */
97 1
    public function renderItems($items = [])
98
    {
99 1
        foreach ($items as $key => $options) {
100 1
            if (isset($options['serviceOptions']))
101 1
                echo Html::tag('div', $this->getContentTitle($options) ? $key : '', $options['serviceOptions']) . PHP_EOL;
102
        }
103 1
    }
104
105
    /**
106
     * @param array $options
107
     * @return bool|mixed
108
     */
109 1
    protected function getContentTitle($options = [])
110
    {
111 1
        return (isset($options['title'])) ? $options['title'] : $this->title;
112
    }
113
114
    /**
115
     * Register client assets
116
     */
117 2
    protected function registerAssets()
118
    {
119 2
        $view = $this->getView();
120 2
        SocialLikesAsset::register($view);
121 2
        $this->registerClientCss($view);
122 2
        $this->registerClientButton($view);
123 2
        $this->registerClientOptions($view);
124 2
    }
125
126
    /**
127
     * @param null|\yii\web\View $view
128
     */
129 2
    protected function registerClientCss($view = null)
130
    {
131 2
        if (!empty($this->clientCss)) {
132 1
            $view->registerCss($this->clientCss);
0 ignored issues
show
It seems like $view is not always an object, but can also be of type null. Maybe add an additional type check?

If a variable is not always an object, we recommend to add an additional type check to ensure your method call is safe:

function someFunction(A $objectMaybe = null)
{
    if ($objectMaybe instanceof A) {
        $objectMaybe->doSomething();
    }
}
Loading history...
133
        }
134 2
    }
135
136
    /**
137
     * @param null|\yii\web\View $view
138
     */
139 2
    protected function registerClientButton($view = null)
140
    {
141 2
        if (!empty($this->clientButtons)) {
142 1
            $clientButtons = Json::encode($this->clientButtons);
143 1
            $script = new JsExpression("
144 1
                var socialLikesButtons = {$clientButtons}
145
            ");
146 1
            $view->registerJs($script, View::POS_BEGIN);
0 ignored issues
show
It seems like $view is not always an object, but can also be of type null. Maybe add an additional type check?

If a variable is not always an object, we recommend to add an additional type check to ensure your method call is safe:

function someFunction(A $objectMaybe = null)
{
    if ($objectMaybe instanceof A) {
        $objectMaybe->doSomething();
    }
}
Loading history...
147
        }
148 2
    }
149
150
    /**
151
     * @param null|\yii\web\View $view
152
     */
153 2
    protected function registerClientOptions($view = null)
154
    {
155 2
        if (!empty($this->clientOptions)) {
156 1
            $options = Json::encode($this->clientOptions);
157 1
            $script = new JsExpression("
158 1
                var container = document.getElementById('{$this->id}');
159
                var socialLikes = SocialLikesNext.default;
160 1
                socialLikes(container, {$options});
161
            ");
162 1
            $view->registerJs($script);
0 ignored issues
show
It seems like $view is not always an object, but can also be of type null. Maybe add an additional type check?

If a variable is not always an object, we recommend to add an additional type check to ensure your method call is safe:

function someFunction(A $objectMaybe = null)
{
    if ($objectMaybe instanceof A) {
        $objectMaybe->doSomething();
    }
}
Loading history...
163
        }
164 2
    }
165
}
166