From fff721dd185f5b97f7ae7a6e64189e55887ff590 Mon Sep 17 00:00:00 2001
From: Jake Vanderwerf <get@jakevanderwerf.ca>
Date: Sun, 05 Jul 2026 18:36:57 +0000
Subject: [PATCH] =Cleaning up the Square integration (still a bit more to do yet). Also majorly overhauled /rest/ files to ignore a rest request 'user' paramater, and rely on get_current_user_id() instead.

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

diff --git a/inc/registrar/Fields.php b/inc/registrar/Fields.php
index c2688ae..c8a2d95 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,13 +19,17 @@
 
 class Fields {
 	protected array $fields;
-	protected 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();
@@ -48,7 +54,7 @@
 		return $this;
 	}
 
-	public function addPostFields():void
+	protected function defaultPostFields():array
 	{
 		$statuses = [
 //					'all' => [
@@ -96,7 +102,13 @@
 				],
 			];
 		}
-		$fields = [
+		return [
+			'post_status'	=> [
+				'type'		=> 'radio',
+				'label'		=> 'Status',
+				'default'	=> 'draft',
+				'options'	=> $statuses
+			],
 			'post_thumbnail'	=> [
 				'type'	=> 'upload',
 				'subtype'	=> 'image',
@@ -107,6 +119,11 @@
 				'type'	=> 'datetime',
 				'label'	=> 'Date',
 			],
+			'post_modified' => [
+				'type'	=> 'datetime',
+				'label'	=> 'Date Modified',
+				'hidden'	=> true,
+			],
 			'post_content' => [
 				'type'	=> 'textarea',
 				'quill'	=> true,
@@ -122,20 +139,19 @@
 				'label'	=> 'TLDR',
 				'maxLength'	=> 158,
 			],
-			'post_status'	=> [
-				'type'		=> 'radio',
-				'label'		=> 'Status',
-				'default'	=> 'draft',
-				'options'	=> $statuses
-			]
 		];
+	}
+
+	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'	=> [
@@ -157,37 +173,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);
 		}
 	}
@@ -388,4 +421,41 @@
 		$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();
+	}
 }

--
Gitblit v1.10.0