<?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 string $placeholder;
|
protected bool $hidden = false;
|
protected int $min;
|
protected int $max;
|
protected bool $isAdditionalField = false;
|
protected bool $isSetupField = false;
|
protected bool $isAdvancedField = false;
|
protected bool $hideStored = 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 = is_callable($permission) ? Closure::fromCallable($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 setHideStored():void
|
{
|
$this->hideStored = true;
|
}
|
public function isHideStored():bool
|
{
|
return $this->hideStored;
|
}
|
public function setOptions(array $options):void
|
{
|
$this->options = $options;
|
}
|
public function setDefault(mixed $default):void
|
{
|
$this->default = $default;
|
}
|
|
public function makeSetupField():void
|
{
|
$this->isSetupField = true;
|
}
|
public function isSetupField():bool
|
{
|
return $this->isSetupField;
|
}
|
public function makeAdvancedField():void
|
{
|
$this->isAdvancedField = true;
|
}
|
public function isAdvancedField():bool{
|
return $this->isAdvancedField;
|
}
|
public function makeAdditionalField():void
|
{
|
$this->isAdditionalField = true;
|
}
|
public function isAdditionalField():bool
|
{
|
return $this->isAdditionalField;
|
}
|
|
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 setMin(int $min):void
|
{
|
$this->min = $min;
|
}
|
public function setMax(int $max):void
|
{
|
$this->max = $max;
|
}
|
|
public function setPlaceholder(string $string):void
|
{
|
$this->placeholder = sanitize_text_field($string);
|
}
|
|
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;
|
}
|
if (isset($this->min)) {
|
$conf['min'] = $this->min;
|
}
|
if (isset($this->max)) {
|
$conf['max'] = $this->max;
|
}
|
if (isset($this->placeholder)) {
|
$conf['placeholder'] = $this->placeholder;
|
}
|
return $conf;
|
}
|
|
}
|