Jake Vanderwerf
9 days ago 47e77f9fac1155c536b2b87fec552c7fcce66fa6
inc/meta/Field.php
@@ -17,6 +17,7 @@
   public array $config;
   public bool $isDirty = false;
   public bool $isValid = true;
   public bool $isDefault = false;
   public array $errors = [];
   public function __construct(string $name, mixed $value, array $config = [])
@@ -25,20 +26,36 @@
      $this->value = $value;
      $this->originalValue = $value;
      $this->config = $config;
      if (array_key_exists('wp', $config) && $config['wp'] === true) {
         $this->isDefault = true;
      }
   }
   /**
    * Set field value and track dirty state
    */
   public function set(mixed $value): self
   {
      $this->value = $value;
      $this->isDirty = ($value !== $this->originalValue);
      error_log('Checking if value is the same as old value: '.print_r($value, true));
      if ($value !== $this->value) {
         error_log('Saving new value: '.print_r($value, true));
         $this->value = $value;
         $this->isDirty = true;
      }
      return $this;
   }
   /**
    * Get current value
    */
   public function get(): mixed
   {
      return $this->value;
   }
   /**
    * Mark field as clean (after save)
    */
   public function markClean(): self
   {
      $this->originalValue = $this->value;
@@ -46,6 +63,9 @@
      return $this;
   }
   /**
    * Reset to original value
    */
   public function reset(): self
   {
      $this->value = $this->originalValue;
@@ -53,6 +73,9 @@
      return $this;
   }
   /**
    * Add validation error
    */
   public function addError(string $message): self
   {
      $this->errors[] = $message;
@@ -60,6 +83,9 @@
      return $this;
   }
   /**
    * Clear all errors
    */
   public function clearErrors(): self
   {
      $this->errors = [];
@@ -67,18 +93,51 @@
      return $this;
   }
   /**
    * Get field type from config
    */
   public function type(): string
   {
      return $this->config['type'] ?? 'text';
   }
   /**
    * Check if this is a WordPress default field
    */
   public function isWpDefault(): bool
   {
      return $this->config['_wp_default'] ?? false;
      return $this->isDefault ?? false;
   }
   /**
    * Check if this is a taxonomy relationship field (not taxonomy_type)
    */
   public function isTaxonomy(): bool
   {
      return $this->type() === 'taxonomy' && !isset($this->config['taxonomy_type']);
      return ($this->type() === 'taxonomy' || ($this->type() === 'selector' && isset($this->config['subtype']) && $this->config['subtype'] === 'taxonomy')) && !isset($this->config['isReference']);
   }
   /**
    * Check if field is required
    */
   public function isRequired(): bool
   {
      return !empty($this->config['required']);
   }
   /**
    * Get field label
    */
   public function label(): string
   {
      return $this->config['label'] ?? $this->name;
   }
   /**
    * Get field description
    */
   public function description(): string
   {
      return $this->config['description'] ?? '';
   }
}