From 0dfe1d8afafc59c4a5559c498342668d5a58d6ef Mon Sep 17 00:00:00 2001
From: Jake Vanderwerf <get@jakevanderwerf.ca>
Date: Thu, 23 Jul 2026 22:41:41 +0000
Subject: [PATCH] =Still working away at the Integrations overhaul

---
 inc/registrar/Registrar.php |   74 ++++++++++++++++++++++++++++---------
 1 files changed, 56 insertions(+), 18 deletions(-)

diff --git a/inc/registrar/Registrar.php b/inc/registrar/Registrar.php
index 1ecadf3..b30b0cf 100644
--- a/inc/registrar/Registrar.php
+++ b/inc/registrar/Registrar.php
@@ -54,6 +54,8 @@
 	public string $prefix_with = 'by';
 
 	public bool $system = false;
+	public bool $baseless = false;
+	public bool $modify = false;
 
 	protected static array $allFlags = [
 		//Shared Flags
@@ -117,7 +119,7 @@
 	 * @var bool Whether to make this a calendar type (example: events)
 	 */
 	protected bool $is_calendar = false;
-	protected ?MakeCalendarType $isCalendarHandler = null;
+
 	/**
 	 * @var bool Whether this is a before/after post type
 	 */
@@ -220,6 +222,7 @@
 
 	/** Helpers **/
 	protected MakeCalendarType|false $calendar = false;
+	protected bool $hasIntegrations = true;
 	protected array $integrationConfigs = [];
 	protected array $integrationFields = [];
 	protected MakeTrackChanges $trackChanges;
@@ -241,7 +244,10 @@
 		$this->setFields();
 
 		add_action('init', [$this, 'register'], 2);
-		add_filter('jvbDashboardPage', [$this, 'renderDashPage'], 10, 3);
+		if ($this->slug !== 'dash') {
+			add_action(BASE.'dashboard_page_'.$this->slug, [$this, 'renderDashPage'], 10, 2);
+		}
+
 	}
 
 	public static function maybeExcludeSingles(array $IDs):array
@@ -296,13 +302,25 @@
 			'post_parent__not_in'	=> [0], // Only get posts with a parent
 		]);
 	}
-
+	public function ensureRegistrar():void
+	{
+		$this->initRegistrar();
+	}
 	protected function initRegistrar():void {
 		$this->registrar = match ($this->type) {
 			'post' => new Posts($this->slug, $this->singular, $this->plural),
 			'term' => new Terms($this->slug, $this->singular, $this->plural),
 			default => false,
 		};
+
+
+		if ($this->baseless) {
+			$this->registrar->baseless = true;
+			$this->registrar->postType = jvbNoBase($this->slug);
+		}
+		if ($this->modify) {
+			$this->registrar->modify = true;
+		}
 	}
 
 	protected function initClasses():void {
@@ -356,6 +374,8 @@
 		return self::$instances[$slug];
 	}
 
+
+
 	/**
 	 * Adds the properties for register_post_type or register_taxonomy
 	 * @param array $args
@@ -395,6 +415,17 @@
 		return $this->args;
 	}
 
+	public function baseless():self
+	{
+		$this->baseless = true;
+		return $this;
+	}
+	public function modify():self
+	{
+		$this->modify = true;
+		return $this;
+	}
+
 	public function setFields():void
 	{
 		$this->fields = new Fields($this->type, $this);
@@ -472,10 +503,17 @@
 	}
 	public function hasIntegration(string $integration):bool
 	{
+		if (!$this->hasIntegrations) {
+			return false;
+		}
 		return array_key_exists($integration, $this->integrationConfigs);
 	}
     public function hasAnyIntegrations(array $integrations = []):bool
     {
+		if (!$this->hasIntegrations) {
+			return false;
+		}
+
         if (empty($integrations)) {
             $integrations = array_keys($this->integrationConfigs);
             return !empty($integrations);
@@ -555,6 +593,9 @@
 		foreach ($flags as $flag) {
 			$this->$flag = true;
 			switch ($flag) {
+				case 'is_calendar':
+					$this->calendar = new MakeCalendarType($this->slug, $this);
+					break;
 				case 'is_content':
 					add_action('init', [$this, 'setupContent'], 20);
 					break;
@@ -639,8 +680,8 @@
 	public static function withIntegration(string $integration, ?string $type = null):array
 	{
 		self::ensureInstanced();
-
-		if (!Site::has($integration)) {
+		Site::getInstance();
+		if (!Site::hasIntegration($integration)) {
 			error_log('[Registrar]::withIntegration Integration not available to fetch: '.$integration);
 			return [];
 		}
@@ -649,7 +690,7 @@
 			if (!is_null($type) && $inst->type !== $type) {
 				return false;
 			}
-			return array_key_exists($integration, $this->integrationConfigs);
+			return array_key_exists($integration, $inst->integrationConfigs);
 		}));
 	}
 
@@ -829,9 +870,6 @@
 				$this->isTimelineHandler = new MakeTimelineType($this->slug);
 				$this->registrar->hierarchical = true;
 			}
-			if ($this->is_calendar) {
-				$this->isCalendarHandler = new MakeCalendarType($this->slug, $this);
-			}
 
 			if (!is_null($this->rewrite_taxonomy)) {
 				$this->registrar->addTaxonomyRewrite($this->rewrite_taxonomy);
@@ -935,16 +973,10 @@
 		return $this;
 	}
 
-	public function renderDashPage(string $content, string $page, string $slug):string
+	public function renderDashPage(string $page, string $slug):void
 	{
-		if ($slug === $this->slug) {
-			ob_start();
-			$crud = new CRUD($slug);
-			$crud->render();
-			return ob_get_clean();
-		}
-
-		return $content;
+		$crud = new CRUD($slug);
+		$crud->render();
 	}
 
 	public function setupContent():void
@@ -1021,6 +1053,7 @@
 
             unset($processing[$termId]);
 		}
+
 	public function renderContent(string $content, array $block):string
 	{
 		if (!is_page($this->page)) {
@@ -1284,4 +1317,9 @@
 
 		return [$images,$fields];
 	}
+
+	public function setHasIntegrations(bool $has = true):void
+	{
+		$this->hasIntegrations = $has;
+	}
 }

--
Gitblit v1.10.0