Jake Vanderwerf
2026-07-10 f94860aacd6200fb24c9e7431eb379a368cb392d
inc/registrar/Fields.php
@@ -3,6 +3,8 @@
use JVBase\managers\SEO\render\Thing\Organization\LocalBusiness\LocalBusiness;
use JVBase\managers\SEO\render\Thing\Thing;
use JVBase\meta\Form;
use JVBase\meta\Meta;
use JVBase\registrar\fields\Field;
use JVBase\registrar\fields\GroupedField;
use JVBase\registrar\fields\OptionsField;
@@ -18,18 +20,25 @@
class Fields {
   protected array $fields;
   private ?Registrar $registrar = null;
   protected ?string $type;
   public function __construct(?string $type = null, ?Registrar $registrar = null) {
      $this->registrar = $registrar;
      $this->type = $type;
      switch ($type) {
         case 'post':
            $this->addPostFields();
            //TODO: Add fields to post edit screen
//          add_action('add_meta_boxes', [$this, 'registerPostFields']);
            break;
         case 'term':
            $this->addTermFields();
            break;
         case 'user':
            $this->addUserFields();
            if ($registrar->hasAnyIntegrations()) {
               $this->addIntegrationSetupField();
            }
            break;
      }
   }
@@ -48,7 +57,7 @@
      return $this;
   }
   public function addPostFields():void
   protected function defaultPostFields():array
   {
      $statuses = [
//             'all' => [
@@ -96,13 +105,13 @@
            ],
         ];
      }
      $fields = [
            'post_status'  => [
                'type'     => 'radio',
                'label'    => 'Status',
                'default'  => 'draft',
                'options'  => $statuses
            ],
      return [
         'post_status'  => [
            'type'      => 'radio',
            'label'     => 'Status',
            'default'   => 'draft',
            'options'   => $statuses
         ],
         'post_thumbnail'  => [
            'type'   => 'upload',
            'subtype'   => 'image',
@@ -134,13 +143,18 @@
            'maxLength' => 158,
         ],
      ];
   }
   public function addPostFields():void
   {
      $fields = $this->defaultPostFields();
      foreach ($fields as $name => $config) {
         $this->addField($name, $config);
      }
   }
   public function addTermFields():void
   protected function defaultTermFields():array
   {
      $fields = [
         'name'   => [
@@ -162,37 +176,54 @@
            'label'        => 'Term Parent'
         ];
      }
      foreach ($fields as $name => $config) {
      return $fields;
   }
   public function addTermFields():void
   {
      foreach ($this->defaultTermFields() as $name => $config) {
         $this->addField($name, $config);
      }
   }
   public function addUserFields():void
   protected function defaultUserFields():array
   {
      $fields = [
      return [
         'first_name'   => [
            'type'   => 'text',
            'label'  => 'First Name',
            'section'=> 'your-account'
         ],
         'last_name' => [
            'type'   => 'text',
            'label'  => 'Last Name',
            'section'=> 'your-account'
         ],
         'user_email'   => [
            'type'   => 'email',
            'label'  => 'Your Email',
            'section'=> 'your-account'
         ],
         'display_name' => [
            'type'   => 'text',
            'label'  => 'Display Name',
            'section'=> 'your-account'
         ],
         'website'   => [
            'type'   => 'url',
            'label'  => 'Website',
         ],
         'description'  => [
            'type'   => 'textarea',
            'quill'  => true,
            'label'  => 'Description',
         ]
//       'website'   => [
//          'type'   => 'url',
//          'label'  => 'Website',
//       ],
//       'description'  => [
//          'type'   => 'textarea',
//          'quill'  => true,
//          'label'  => 'Description',
//       ],
      ];
      foreach ($fields as $name => $config) {
   }
   public function addUserFields():void
   {
      foreach ($this->defaultUserFields() as $name => $config) {
         $this->addField($name, $config);
      }
   }
@@ -393,4 +424,54 @@
      $business = new LocalBusiness();
      $business->setHasOfferCatalogField($this);
   }
   public function registerPostFields():void
   {
      $postType = $this->registrar->getBased();
      add_meta_box(
         $postType.'_fields',
         'Extra Fields',
         [$this, 'renderMyMetaBox'],
         $postType,
         'side',
         'high'
      );
   }
   public function renderMyMetaBox():void
   {
      $ID = get_the_ID();
      $meta = match ($this->type) {
         'post'   => Meta::forPost($ID),
         'term'   => Meta::forTerm($ID),
         'user'   => Meta::forUser($ID),
      };
      $defaults = array_keys(match($this->type) {
         'post'   => $this->defaultPostFields(),
         'term'   => $this->defaultTermFields(),
         'user'   => $this->defaultUserFields()
      });
      foreach ($this->fields as $fName => $field){
         if (!in_array($fName, $defaults)){
            echo Form::render($fName, $meta->get($fName),$field->getConfig());
         }
      }
   }
   public static function getUserFields():array
   {
      return (new self())->defaultUserFields();
   }
   protected function addIntegrationSetupField():void
   {
      $integrations = $this->registrar->getIntegrations();
      foreach (array_keys($integrations) as $integration) {
         $this->addField('integration_'.$integration.'_connected', [
            'type'   => 'true_false',
            'hidden' => true,
            'label'     => 'Connected to '.$integration,
            'default'   => false,
         ]);
      }
   }
}