<?php
|
namespace JVBase\meta;
|
|
if (!defined('ABSPATH')) {
|
exit;
|
}
|
|
/**
|
* Single field data container
|
* Holds value, config, and tracks dirty state
|
*/
|
final class Field
|
{
|
public string $name;
|
public mixed $value;
|
public mixed $originalValue;
|
public array $config;
|
public bool $isDirty = false;
|
public bool $isValid = true;
|
public array $errors = [];
|
|
public function __construct(string $name, mixed $value, array $config = [])
|
{
|
$this->name = $name;
|
$this->value = $value;
|
$this->originalValue = $value;
|
$this->config = $config;
|
}
|
|
public function set(mixed $value): self
|
{
|
$this->value = $value;
|
$this->isDirty = ($value !== $this->originalValue);
|
return $this;
|
}
|
|
public function get(): mixed
|
{
|
return $this->value;
|
}
|
|
public function markClean(): self
|
{
|
$this->originalValue = $this->value;
|
$this->isDirty = false;
|
return $this;
|
}
|
|
public function reset(): self
|
{
|
$this->value = $this->originalValue;
|
$this->isDirty = false;
|
return $this;
|
}
|
|
public function addError(string $message): self
|
{
|
$this->errors[] = $message;
|
$this->isValid = false;
|
return $this;
|
}
|
|
public function clearErrors(): self
|
{
|
$this->errors = [];
|
$this->isValid = true;
|
return $this;
|
}
|
|
public function type(): string
|
{
|
return $this->config['type'] ?? 'text';
|
}
|
|
public function isWpDefault(): bool
|
{
|
return $this->config['_wp_default'] ?? false;
|
}
|
|
public function isTaxonomy(): bool
|
{
|
return $this->type() === 'taxonomy' && !isset($this->config['taxonomy_type']);
|
}
|
}
|