-
Notifications
You must be signed in to change notification settings - Fork 1
/
BulkCheckboxColumn.php
93 lines (81 loc) · 3.12 KB
/
BulkCheckboxColumn.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
<?php
namespace integready\bulkactionscheckboxcolumn;
use kartik\grid\CheckboxColumn;
/**
* Class BulkCheckboxColumn
*/
class BulkCheckboxColumn extends CheckboxColumn
{
const BUTTON_TYPE_DROPDOWN = 1;
const BUTTON_TYPE_CUSTOM_JS = 0;
/**
* @var array
*/
public $elements;
/**
* @var array
*/
public $toolbarTemplate = [
'{export}',
'{toggleData}',
];
/**
* @var string
*/
protected $fieldFilterSelector = '';
/**
* @inheritdoc
*/
public function init()
{
parent::init();
$grid = $this->grid;
$buttons = '';
if (!empty($this->elements) && count($this->elements) >= 1) {
$comma = false;
foreach ($this->elements as $key => $element) {
if (isset($element['visible']) && $element['visible'] === false) {
continue;
}
if (!isset($element['buttonType']) || $element['buttonType'] === self::BUTTON_TYPE_DROPDOWN) {
$element['field'] = $grid->getId() . '_' . $element['field'];
if ($comma) {
$this->fieldFilterSelector .= ', input[name=\'' . $element['field'] . '\']';
} else {
$this->fieldFilterSelector .= 'input[name=\'' . $element['field'] . '\']';
$comma = true;
}
$buttons .= ButtonDropdown::widget([
'label' => $element['label'],
'field' => $element['field'],
'selectorName' => $grid->id . '-ids',
'gridId' => $grid->id,
'buttonClass' => isset($element['buttonClass']) ? $element['buttonClass'] : null,
'buttonOptions' => isset($element['buttonOptions']) ? $element['buttonOptions'] : [],
'items' => $element['items'],
]);
} elseif ($element['buttonType'] === self::BUTTON_TYPE_CUSTOM_JS) {
$buttons .= ButtonSingle::widget([
'label' => $element['label'],
'selectorName' => $grid->id . '-ids',
'gridId' => $grid->id,
'buttonClass' => isset($element['buttonClass']) ? $element['buttonClass'] : null,
'buttonOptions' => isset($element['buttonOptions']) ? $element['buttonOptions'] : [],
'customJs' => $element['customJs'],
]);
} else {
continue;
}
}
}
$grid->toolbar = $this->toolbarTemplate;
array_unshift($grid->toolbar, $buttons);
if (!empty($this->fieldFilterSelector)) {
if (!empty($grid->filterSelector)) {
$grid->filterSelector .= ', ' . $this->fieldFilterSelector;
} else {
$grid->filterSelector = $this->fieldFilterSelector;
}
}
}
}