AbstractNavigationBar::setButtons()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 5
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 3
nc 1
nop 1
1
<?php
2
/**
3
 * @company MTE Telecom, Ltd.
4
 * @author Ushkov Nikolai <[email protected]>
5
 * Date: 18.04.16
6
 * Time: 16:53
7
 */
8
namespace Nnx\DataGrid\NavigationBar;
9
10
use ArrayAccess;
11
use Nnx\DataGrid\Button;
12
use Nnx\DataGrid\Button\GridButtonPluginManagerAwareTrait;
13
use Nnx\DataGrid\Button\ButtonInterface;
14
/**
15
 * Class AbstractNavigationBar
16
 * @package Nnx\DataGrid\NavigationBar
17
 */
18
abstract class AbstractNavigationBar implements NavigationBarInterface
19
{
20
    use GridButtonPluginManagerAwareTrait;
21
22
    /**
23
     * Кнопки бара
24
     * @var array
25
     */
26
    protected $buttons = [];
27
28
    /**
29
     * Опции бара
30
     * @var array
31
     */
32
    protected $options = [];
33
34
    /**
35
     * @param array $options
36
     * @throws Exception\InvalidArgumentException
37
     */
38
    public function __construct($options = [])
39
    {
40
        if (empty($options['buttonPluginManager'])) {
41
            throw new Exception\InvalidArgumentException(
42
                'Для корректной работы навигационного бара в конструктор необходимо передавать buttonPluginManager.'
43
            );
44
        }
45
        $buttonPluginManager = $options['buttonPluginManager'];
46
        $this->setButtonPluginManager($buttonPluginManager);
47
        unset($options['buttonPluginManager']);
48
        $this->setOptions($options);
49
    }
50
51
52
    /**
53
     * добавить кнопку
54
     * @param ButtonInterface | array | ArrayAccess $button
55
     * @return $this
56
     * @throws Button\Exception\InvalidButtonException
57
     * @throws Exception\InvalidArgumentException
58
     * @throws Exception\RuntimeException
59
     */
60
    public function add($button)
61
    {
62
        if (is_array($button) || $button instanceof ArrayAccess) {
63
            if (!array_key_exists('type', $button)) {
64
                throw new Button\Exception\InvalidButtonException(
65
                    'Не передан тип создаваемой кнопки.'
66
                );
67
            }
68
            $button['buttonPluginManager'] = $this->getButtonPluginManager();
69
            if (!$this->getButtonPluginManager()->has($button['type'])) {
70
                throw new Exception\RuntimeException(sprintf('Кнопка с именем %s не найдена', $button['type']));
71
            }
72
            /** @var ButtonInterface $button */
73
            $button = $this->getButtonPluginManager()->get($button['type'], $button);
0 ignored issues
show
Documentation introduced by
$button is of type object<Nnx\DataGrid\Button\ButtonInterface>, but the function expects a array.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
74
        } elseif (!$button instanceof ButtonInterface) {
75
            throw new Exception\InvalidArgumentException(
76
                sprintf('Кнопка должна быть массивом или реализовывать %s', ButtonInterface::class)
77
            );
78
        }
79
        $this->buttons[$button->getName()] = $button;
80
        return $this;
81
    }
82
83
    /**
84
     * удалить кнопку
85
     * @param $name
86
     * @return $this
87
     */
88
    public function remove($name)
89
    {
90
        unset($this->buttons[$name]);
91
        return $this;
92
    }
93
94
    /**
95
     * получить кнопки бара
96
     * @return array
97
     */
98
    public function getButtons()
99
    {
100
        return $this->buttons;
101
    }
102
103
    /**
104
     * установить кнопки бара
105
     * @param array $buttons
106
     * @return $this
107
     */
108
    public function setButtons($buttons)
109
    {
110
        $this->buttons = $buttons;
111
        return $this;
112
    }
113
114
    /**
115
     * @return array
116
     */
117
    public function getOptions()
118
    {
119
        return $this->options;
120
    }
121
122
    /**
123
     * @param array $options
124
     * @return $this
125
     */
126
    public function setOptions($options)
127
    {
128
        $this->options = $options;
129
        return $this;
130
    }
131
}
0 ignored issues
show
Coding Style introduced by
As per coding style, files should not end with a newline character.

This check marks files that end in a newline character, i.e. an empy line.

Loading history...
132