Jake Vanderwerf
2026-07-12 c204185ae86a98994f80010abf35a190c9406739
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
<?php
namespace JVBase\integrations;
 
use Closure;
 
if (!defined('ABSPATH')) {
    exit;
}
 
class Field {
    public string $name;
    public string $label;
    public string $type;
    public bool $required;
    public string|Closure|bool $permission;
    protected array $options;
 
    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 getConfig():array
    {
        $conf = [
            'name'  => $this->name,
            'label' => $this->label,
            'type'  => $this->type,
        ];
        if ($this->required) {
            $conf['required'] = true;
        }
        if ($this->options) {
            $conf['options'] = $this->options;
        }
        return $conf;
    }
}