Jake Vanderwerf
5 days ago 0dfe1d8afafc59c4a5559c498342668d5a58d6ef
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
<?php
namespace JVBase\integrations;
 
use Closure;
 
if (!defined('ABSPATH')) {
    exit;
}
 
class Field {
    public string $name;
    public string $label;
    public string $type;
    public string $hint;
    public bool $required;
    public string|Closure|bool $permission;
    protected array $options;
    protected mixed $default;
    protected string $subtype;
    protected bool $hidden = false;
 
    public function __construct(string $name, string $label, string $type, callable|string|bool $permission)
    {
        $this->name = $name;
        $this->label = $label;
        $this->type = $type;
        $this->permission = $permission;
    }
 
    public function checkPermission():bool
    {
        if (is_bool($this->permission)) {
            return $this->permission;
        }
        if (is_string($this->permission)) {
            return current_user_can($this->permission);
        }
        if (is_callable($this->permission)) {
            return ($this->permission)();
        }
        error_log('Check Permission failed as no permission set. '.print_r([
            'permission' => $this->permission,
                'field' => $this->name,
            ], true));
        return false;
    }
 
    public function setRequired():void
    {
        $this->required = true;
    }
    public function setOptions(array $options):void
    {
        $this->options = $options;
    }
    public function setDefault(mixed $default):void
    {
        $this->default = $default;
    }
 
    public function setHint(string $hint):void
    {
        $this->hint = $hint;
    }
    public function setHidden(bool $hidden = true):void
    {
        $this->hidden = $hidden;
    }
 
    public function setSubType(string $type):void
    {
        $this->subType = $type;
    }
 
    public function getConfig():array
    {
        $conf = [
            'name'  => $this->name,
            'label' => $this->label,
            'type'  => $this->type,
        ];
        if (isset($this->required)) {
            $conf['required'] = true;
        }
        if (isset($this->options)) {
            $conf['options'] = $this->options;
        }
        if (isset($this->default)) {
            $conf['default'] = $this->default;
        }
        if (isset($this->hint)) {
            $conf['hint'] = $this->hint;
        }
        if (isset($this->subType)) {
            $conf['subtype'] = $this->subType;
        }
        if ($this->hidden) {
            $conf['hidden'] = true;
        }
        return $conf;
    }
}