<?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;
|
}
|
}
|