Toggleable.php
1.23 KB
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
<?php
namespace YahnisElsts\AdminMenuEditor\Customizable\Controls;
use YahnisElsts\AdminMenuEditor\Customizable\SettingCondition;
trait Toggleable {
/**
* @var callable
*/
protected $enabled = '__return_true';
protected function parseEnabledParam($params) {
if ( array_key_exists('enabled', $params) ) {
if (
is_bool($params['enabled'])
|| is_numeric($params['enabled'])
|| ($params['enabled'] === null)
) {
$this->enabled = $params['enabled'] ? '__return_true' : '__return_false';
} else {
$this->enabled = $params['enabled'];
}
} else if ( isset($this->mainSetting) && !empty($this->mainSetting) ) {
$this->enabled = $this->mainSetting->isEditableByUser() ? '__return_true' : '__return_false';
}
}
/**
* @return bool
*/
public function isEnabled() {
return call_user_func($this->enabled);
}
protected function getKoEnableBinding() {
if ( $this->enabled instanceof SettingCondition ) {
return ['enable' => $this->enabled->getJsKoExpression()];
}
return $this->isEnabled() ? [] : ['enable' => false];
}
protected function serializeConditionForJs() {
if ( $this->enabled instanceof SettingCondition ) {
return $this->enabled->serializeForJs();
}
return $this->isEnabled();
}
}