From ed57c386db34d8693ca75311972d0929ebe5f488 Mon Sep 17 00:00:00 2001
From: Jake Vanderwerf <get@jakevanderwerf.ca>
Date: Mon, 01 Jun 2026 22:23:19 +0000
Subject: [PATCH] =Added some more Schema classes, allowed for override of  array in outputSchema for complex schema, as for timeline post types

---
 inc/registrar/Fields.php |  260 ++++++++++++++++++++++-----------------------------
 1 files changed, 113 insertions(+), 147 deletions(-)

diff --git a/inc/registrar/Fields.php b/inc/registrar/Fields.php
index ada4615..c2688ae 100644
--- a/inc/registrar/Fields.php
+++ b/inc/registrar/Fields.php
@@ -1,6 +1,8 @@
 <?php
 namespace JVBase\registrar;
 
+use JVBase\managers\SEO\render\Thing\Organization\LocalBusiness\LocalBusiness;
+use JVBase\managers\SEO\render\Thing\Thing;
 use JVBase\registrar\fields\Field;
 use JVBase\registrar\fields\GroupedField;
 use JVBase\registrar\fields\OptionsField;
@@ -48,9 +50,56 @@
 
 	public function addPostFields():void
 	{
+		$statuses = [
+//					'all' => [
+//						'icon' => 'infinity',
+//						'label' => 'Everything',
+//					],
+			'publish' => [
+				'icon' => 'eye',
+				'label' => 'Live',
+			],
+			'draft' => [
+				'icon' => 'eye-closed',
+				'label' => 'Hidden',
+			],
+			'trash' => [
+				'label' => 'Scrapped',
+				'icon' => 'trash',
+			],
+//			'delete'	=> [
+//				'label'	=> 'Permanently Delete',
+//				'icon'	=> 'trash'
+//			]
+		];
+		if ($this->registrar->hasFeature('is_calendar')) {
+			$statuses = [
+				'future'	=> [
+					'icon'	=> '',
+					'label'	=> 'Upcoming',
+				],
+				'past'	=> [
+					'icon'	=> '',
+					'label'	=> 'Past',
+				],
+				'repeat'	=> [
+					'icon'	=> '',
+					'label'	=> 'Repeating',
+				],
+				'draft' => [
+					'icon' => 'eye-closed',
+					'label' => 'Hidden',
+				],
+				'trash' => [
+					'label' => 'Scrapped',
+					'icon' => 'trash',
+				],
+			];
+		}
 		$fields = [
 			'post_thumbnail'	=> [
 				'type'	=> 'upload',
+				'subtype'	=> 'image',
 				'multiple'=> false,
 				'label'	=> 'Main Image',
 			],
@@ -77,28 +126,7 @@
 				'type'		=> 'radio',
 				'label'		=> 'Status',
 				'default'	=> 'draft',
-				'options'	=> [
-					'all' => [
-						'icon' => 'infinity',
-						'label' => 'Everything',
-					],
-					'publish' => [
-						'icon' => 'eye',
-						'label' => 'Live',
-					],
-					'draft' => [
-						'icon' => 'eye-closed',
-						'label' => 'Hidden',
-					],
-					'trash' => [
-						'label' => 'Scrapped',
-						'icon' => 'trash',
-					],
-					'delete'	=> [
-						'label'	=> 'Permanently Delete',
-						'icon'	=> 'trash'
-					]
-				]
+				'options'	=> $statuses
 			]
 		];
 
@@ -267,159 +295,97 @@
 
 	protected function addReviewField(?string $label = null):void
 	{
-		$this->addField(
-			'reviews',
-			[
-				'type'    => 'repeater',
-				'add_label'	=> 'name',
-				'label'   => $label ?: 'Reviews',
-				'fields'  => [
-					'name'   => [
-						'type'  => 'text',
-						'label' => 'Reviewer Name',
-					],
-					'review' => [
-						'type'  => 'textarea',
-						'quill' => false,
-						'label' => 'Review',
-					],
-					'rating' => [
-						'type'    => 'select',
-						'label'   => 'Rating',
-						'options' => [
-							'none' => 'Not Given',
-							'0.5'  => '0.5',
-							'1'    => '1',
-							'1.5'  => '1.5',
-							'2'    => '2',
-							'2.5'  => '2.5',
-							'3'    => '3',
-							'3.5'  => '3.5',
-							'4'    => '4',
-							'4.5'  => '4.5',
-							'5'    => '5',
-						],
-						'default' => 'none'
-					],
-					'date'   => [
-						'type'  => 'date',
-						'label' => 'Date of Review',
-					],
-					'url'    => [
-						'type'  => 'url',
-						'label' => 'Link to Review (optional)',
-					],
-				],
-				'section' => 'seo'
-			]
-		);
+		$biz = new LocalBusiness();
+		$biz->setReviewField($this);
 	}
 
 	protected function addAlternateNameField():void
 	{
-		$this->addField(
-			'alternate_name',
-			[
-				'type'    => 'repeater',
-				'label'   => 'Alternate Name',
-				'fields'  => [
-					'name' => [
-						'type'  => 'text',
-						'label' => 'Name',
-					]
-				],
-				'section' => 'seo'
-			]
-		);
+		$thing = new Thing();
+		$thing->setAlternateNameField($this);
 	}
 	protected function addKeywordsField():void
 	{
-		$this->addField(
-			'keywords',
-			[
-				'type'      => 'repeater',
-				'label'     => 'Keywords',
-				'fields'    => [
-					'keyword' => [
-						'type'  => 'text',
-						'label' => 'Keyword',
-					],
-				],
-				'default'   => $labels ?? [ 'Edmonton tattoos', 'Edmonton tattoo artist', 'Edmonton tattooist' ],
-				'section'   => 'seo',
-				'quickEdit' => true,
-			]
-		);
+		$thing = new LocalBusiness();
+		$thing->setKeywordsField($this);
 	}
 
 	protected function addOutsidePhotoField():void
 	{
-		$this->addField(
-			'outside_photo',
-			[
-				'type'	=> 'image',
-				'limit'	=> 1,
-				'label'	=> __('Outside Photo', 'jvb')
-			]
-		);
+		$business = new LocalBusiness();
+		$business->setPhotoField($this);
 	}
 
 	protected function addSloganField():void
 	{
-		$this->addField(
-			'slogan',
-			[
-				'type'	=> 'text',
-				'label'	=> __('Tagline or Slogan', 'jvb')
-			]
-		);
+		$business = new LocalBusiness();
+		$business->setSloganField($this);
 	}
 
 	protected function addPaymentField():void
 	{
-		$this->addField(
-			'payment_accepted',
-			[
-				'type'	=> 'set',
-				'label'	=> __('Payment Accepted', 'jvb'),
-				'options'	=> [
-					'Cash'          => 'Cash',
-					'Credit Card'   => 'Credit Card',
-					'Debit'         => 'Debit',
-					'Google Pay'    => 'Google Pay',
-					'Apple Pay'     => 'Apple Pay',
-					'PayPal'        => 'PayPal',
-					'Interac'       => 'Interac',
-					'AMEX'          => 'AMEX',
-				],
-			]
-		);
+		$business = new LocalBusiness();
+		$business->setPaymentAcceptedField($this);
 	}
 
 	protected function addAmenitiesField():void
 	{
+		$business = new LocalBusiness();
+		$business->setAmenityFeatureField($this);
+	}
+	protected function addCredentialsField():void
+	{
 		$this->addField(
-			'amenities',
+			'credentials',
 			[
 				'type'	=> 'set',
-				'label'	=> __('Amenities', 'jvb'),
-				'options' => [
-					'Wheelchair Accessible' => 'Wheelchair Accessible',
-					'Free Parking' => 'Free Parking',
-					'Private Rooms' => 'Private Rooms',
-					'Air Conditioning' => 'Air Conditioning',
-					'WiFi' => 'WiFi',
-					'Gender Neutral Restroom' => 'Gender Neutral Restroom',
-					'LGBTQ+ Friendly' => 'LGBTQ+ Friendly',
-					'Sterilization Room' => 'Sterilization Room',
-					'Refreshments Available' => 'Refreshments Available',
-					'Street Level Access' => 'Street Level Access',
-					'Single Use Needles' => 'Single Use Needles',
-					'Consultation Room' => 'Consultation Room',
-					'Aftercare Products Available' => 'Aftercare Products Available',
-					'Walk-Ins Welcome' => 'Walk-Ins Welcome',
+				'label'	=> __('Credentials', 'jvb'),
+				'options'=> [
+					'WHMIS 2015' => 'WHMIS 2015',
+					'Tattoo and Piercing Safety Standards' => 'Tattoo and Piercing Safety Standards',
+					'Bloodborne Pathogens and Infection Control' => 'Bloodborne Pathogens and Infection Control',
+					'First Aid Training' => 'First Aid Training',
 				]
 			]
 		);
 	}
+	protected function addPermanentlyCloseField():void
+	{
+		$business = new LocalBusiness();
+		$business->setDissolutionDateField($this);
+	}
+
+	protected function addHoursField():void
+	{
+		$business = new LocalBusiness();
+		$business->setOpeningHoursSpecificationField($this);
+	}
+
+	protected function addRateField():void
+	{
+		$this->addField('rate',
+		[
+			'type'	=> 'text',
+			'subtype'	=> 'number',
+			'label'		=> __('Hourly Rate', 'jvb')
+		]);
+	}
+
+	protected function addAwardsField():void
+	{
+		$business = new LocalBusiness();
+		$business->setAwardField($this);
+	}
+
+	protected function addRatingsField():void
+	{
+		$business = new LocalBusiness();
+		$business->setAggregateRatingField($this);
+	}
+
+	protected function addServicesField():void
+	{
+		$business = new LocalBusiness();
+		$business->setHasOfferCatalogField($this);
+	}
 }

--
Gitblit v1.10.0