Jake Vanderwerf
2026-04-26 86c6cd3cc099d2480932ede03c12cea01e625c94
inc/registrar/fields/Field.php
@@ -19,6 +19,8 @@
   protected bool $quickEdit = true;   // whether to show in quick edit table
   protected bool $quill;           // whether to use quill
   protected int $maxLength;        // of characters
   protected string $subtype;
   protected array $allowedSubtype = ['text', 'url','number','tel','email','number'];
   /**
    * @var ?bool For timeline post types. Indicates whether all posts get this field, or just the parent
    */
@@ -37,12 +39,23 @@
            return;
         }
      }
      $current = get_class($this);
      $class = match($config['type']) {
         'group'  => ($current !== GroupedField::class) ? new GroupedField($name, $config) : $this,
         'select', 'radio', 'checkbox' => ($current !== OptionsField::class) ? new OptionsField($name, $config) : $this,
         'repeater' => ($current !== RepeaterField::class) ? new RepeaterField($name, $config) : $this,
         'taglist' => ($current !== TagListField::class) ? new TagListField($name, $config) : $this,
         'taxonomy', 'post', 'user', 'selector' => ($current !== SelectorField::class) ? new SelectorField($name, $config) : $this,
         'upload' => ($current !== UploadField::class) ? new UploadField($name, $config) : $this,
         default => $this
      };
      foreach ($config as $key => $value) {
         if (property_exists($this, $key)) {
            $method = 'set' . ucfirst($key);
            $this->$method($value);
         if (property_exists($class, $key)) {
            $method = 'set'.implode('',array_map('ucfirst',explode('_', $key)));;
            $class->$method($value);
         } else {
            error_log('Instance: '.print_r($this, true));
            error_log('Instance: '.print_r($class, true));
            error_log('[JVBase\registrar\Field] Invalid key for '.$name.': '.$key);
         }
      }
@@ -120,16 +133,16 @@
   public function getConfig():array{
      $config = get_object_vars($this);
      $config = array_map(function ($item) {
      return array_map(function ($item) {
         if (is_a($item, Field::class)) {
            return $item->getConfig();
         } else if (is_array($item)) {
            $temp = [];
            foreach ($item as $v) {
            foreach ($item as $k => $v) {
               if (is_a($v, Field::class)) {
                  $temp[] = $v->getConfig();
                  $temp[$k] = $v->getConfig();
               } else {
                  $temp[] = $v;
                  $temp[$k] = $v;
               }
            }
            return $temp;
@@ -137,7 +150,17 @@
            return $item;
         }
      }, $config);
      return $config;
   }
   public function setSubtype(string $subtype):void
   {
      if (!in_array($subtype, $this->allowedSubtype)) {
         error_log('[SelectorField]Attempted subtype not allowed: '.$subtype);
         return;
      }
      $this->subtype = $subtype;
   }
   public function getSubtype():string
   {
      return $this->subtype;
   }
}