From f94860aacd6200fb24c9e7431eb379a368cb392d Mon Sep 17 00:00:00 2001
From: Jake Vanderwerf <get@jakevanderwerf.ca>
Date: Fri, 10 Jul 2026 00:35:44 +0000
Subject: [PATCH] =Refactored CredentialsManager.php to utilize a CustomTable instance instead

---
 inc/registrar/Fields.php |  127 ++++++++++++++++++++++++++++++++++-------
 1 files changed, 104 insertions(+), 23 deletions(-)

diff --git a/inc/registrar/Fields.php b/inc/registrar/Fields.php
index 8e37662..f9668f2 100644
--- a/inc/registrar/Fields.php
+++ b/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;
@@ -17,19 +19,26 @@
 
 class Fields {
 	protected array $fields;
-	private Registrar $registrar;
+	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,
+			]);
+		}
+	}
 }

--
Gitblit v1.10.0