-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathListSwitchField.php
128 lines (112 loc) · 3.12 KB
/
ListSwitchField.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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
<?php namespace Inetis\ListSwitch;
use Backend\Classes\ListColumn;
use Lang;
use October\Rain\Database\Model;
class ListSwitchField
{
/**
* Default field configuration
* all these params can be overrided by column config
* @var array
*/
private static $defaultFieldConfig = [
'icon' => true,
'titleTrue' => 'inetis.listswitch::lang.inetis.listswitch.title_true',
'titleFalse' => 'inetis.listswitch::lang.inetis.listswitch.title_false',
'textTrue' => 'inetis.listswitch::lang.inetis.listswitch.text_true',
'textFalse' => 'inetis.listswitch::lang.inetis.listswitch.text_false',
'request' => 'onSwitchInetisListField'
];
private $name;
private $value;
private $column;
private $record;
private $config;
/**
* @param $value
* @param ListColumn $column
* @param Model $record
*
* @return string HTML
*/
public static function render($value, ListColumn $column, $record)
{
$field = new self($value, $column, $record);
$config = $field->getConfig();
return '
<a href="javascript:;"
data-request="' . $config['request'] . '"
data-request-data="' . $field->getRequestData() . '"
data-stripe-load-indicator
title="' . $field->getButtonTitle() . '">
' . $field->getButtonValue() . '
</a>
';
}
/**
* ListSwitchField constructor.
*
* @param $value
* @param ListColumn $column
* @param Model $record
*/
public function __construct($value, ListColumn $column, $record)
{
$this->name = $column->columnName;
$this->value = $value;
$this->column = $column;
$this->record = $record;
$this->config = array_merge(self::$defaultFieldConfig, $column->config);
}
/**
* @param $config
*
* @return mixed
*/
private function getConfig($config = null)
{
return data_get($this->config, $config);
}
/**
* Return data-request-data params for the switch button
*
* @return string
*/
public function getRequestData()
{
$modelClass = str_replace('\\', '\\\\', get_class($this->record));
$data = [
"id: {$this->record->{$this->record->getKeyName()}}",
"field: '$this->name'",
"model: '$modelClass'"
];
if (post('page')) {
$data[] = "page: " . post('page');
}
return implode(', ', $data);
}
/**
* Return button text or icon
*
* @return string
*/
public function getButtonValue()
{
if (!$this->getConfig('icon')) {
return Lang::get($this->getConfig($this->value ? 'textTrue' : 'textFalse'));
}
if ($this->value) {
return '<i class="oc-icon-check"></i>';
}
return '<i class="oc-icon-times"></i>';
}
/**
* Return button hover title
*
* @return string
*/
public function getButtonTitle()
{
return Lang::get($this->getConfig($this->value ? 'titleTrue' : 'titleFalse'));
}
}