Jake Vanderwerf
2025-12-21 3aada9949d51024a92a8b5c6cb70d12f9c3cac16
inc/meta/MetaValidator.php
@@ -1,6 +1,7 @@
<?php
namespace JVBase\meta;
use DateTime;
use JVBase\meta\MetaTypeManager;
use WP_Error;
@@ -44,11 +45,12 @@
    protected function validateNumber(float $value, array $field_config):bool|WP_Error
    {
        if (empty($value)) {
            if (!empty($field['required'])) {
                return new WP_Error('required_field', 'This field is required');
         if (!empty($field_config['required'])) { // ✅ Correct variable
            return new \WP_Error('required_field', 'This field is required');
            }
            return true;
        }
        if (!is_numeric($value)) {
            $this->addError($field_config['name'], __('Must be a number', 'jvb'));
            return false;
@@ -76,24 +78,25 @@
    protected function validateEmail(string $value, array $config):bool|WP_Error
    {
        if (empty($value)) {
            if (!empty($field['required'])) {
                return new WP_Error('required_field', 'This field is required');
         if (!empty($config['required'])) { // ✅ Correct variable
            return new \WP_Error('required_field', 'This field is required');
            }
            return true;
        }
        $check = is_email($value);
        if (!$check) {
            $this->addError(
                $config['name'],
                __('Must be a valid email', 'jvb')
            );
      // Validate email format
      if (!is_email($value)) {
         $this->addError($config['name'], __('Invalid email address', 'jvb'));
         return false;
        }
        return $check;
      return true;
    }
   protected function validateGroup(array $value, array $config):bool
   {
      if (empty($value)) {
      if (empty($value) || !is_array($value)) {
         if (!empty($config['required'])) {
            $this->addError($config['name'], __('This field is required', 'jvb'));
            return false;
@@ -101,30 +104,20 @@
         return true;
      }
      if (!is_array($value)) {
         $this->addError($config['name'], __('Group field must be an array', 'jvb'));
      // Validate each sub-field
      if (!empty($config['fields']) && is_array($config['fields'])) {
         foreach ($config['fields'] as $subFieldName => $subFieldConfig) {
            if (isset($value[$subFieldName])) {
               $subFieldConfig['name'] = $subFieldName;
               $isValid = $this->validate($value[$subFieldName], $subFieldConfig);
               if (!$isValid) {
         return false;
      }
      if (!isset($config['fields']) || !is_array($config['fields'])) {
         return true; // No subfields to validate
      }
      $all_valid = true;
      foreach ($config['fields'] as $field_name => $field_config) {
         if (!isset($value[$field_name])) {
            continue; // Skip missing fields unless required
         }
         $field_config['name'] = $config['name'] . '[' . $field_name . ']'; // For error messages
         if (!$this->validate($value[$field_name], $field_config)) {
            $all_valid = false;
         }
      }
      return $all_valid;
      return true;
   }
    protected function validateGallery(array|string $value, array $field):bool|WP_Error
@@ -299,6 +292,64 @@
      return true;
   }
   protected function validateTagList(array $value, array $config): bool
   {
      if (empty($value)) {
         if (!empty($config['required'])) {
            $this->addError($config['name'], __('This field is required', 'jvb'));
            return false;
         }
         return true;
      }
      if (!is_array($value)) {
         $this->addError($config['name'], __('Invalid data format', 'jvb'));
         return false;
      }
      // Check min/max items
      if (isset($config['min_items']) && count($value) < $config['min_items']) {
         $this->addError(
            $config['name'],
            sprintf(__('Minimum of %d items required', 'jvb'), $config['min_items'])
         );
         return false;
      }
      if (isset($config['max_items']) && count($value) > $config['max_items']) {
         $this->addError(
            $config['name'],
            sprintf(__('Maximum of %d items allowed', 'jvb'), $config['max_items'])
         );
         return false;
      }
      // Validate each item's fields
      if (!isset($config['fields']) || !is_array($config['fields'])) {
         return true;
      }
      foreach ($value as $index => $row) {
         if (!is_array($row)) {
            continue;
         }
         foreach ($config['fields'] as $field_name => $field_config) {
            if (!isset($row[$field_name])) {
               continue;
            }
            $field_config['name'] = "{$config['name']}[{$index}][{$field_name}]";
            if (!$this->validate($row[$field_name], $field_config)) {
               return false;
            }
         }
      }
      return true;
   }
    protected function validateRepeater(array $value, array $config):bool|WP_Error
    {
        if (empty($value)) {