From 87237f15618e2320967b9380c360b89f7323d2e9 Mon Sep 17 00:00:00 2001
From: Jake Vanderwerf <get@jakevanderwerf.ca>
Date: Sun, 30 Aug 2026 16:01:05 +0000
Subject: [PATCH] =Meta overhaul, slight reference fixes in BreadcrumbsManager

---
 inc/managers/DashboardManager.php |   65 ++++++++++++++++++--------------
 1 files changed, 37 insertions(+), 28 deletions(-)

diff --git a/inc/managers/DashboardManager.php b/inc/managers/DashboardManager.php
index 73be522..fc91ddf 100644
--- a/inc/managers/DashboardManager.php
+++ b/inc/managers/DashboardManager.php
@@ -3,7 +3,7 @@
 
 use JetBrains\PhpStorm\NoReturn;use JVBase\forms\TaxonomySelector;
 use JVBase\base\Site;
-use JVBase\meta\Form;
+use JVBase\integrations\ServiceMap;use JVBase\meta\Form;
 use JVBase\registrar\Registrar;
 use JVBase\ui\Navigation;
 use WP_Error;use WP_Query;use WP_User;
@@ -17,6 +17,8 @@
  */
 class DashboardManager
 {
+	use ServiceMap;
+
     protected WP_User $user;
     protected Cache $cache;
     protected string $role;
@@ -25,10 +27,8 @@
 
     public function __construct()
     {
-        $this->cache = Cache::for('dashboard', WEEK_IN_SECONDS)->connect('user')->user();
-		if (JVB_TESTING) {
-			$this->cache->flush();
-		}
+        $this->cache = Cache::for('dashboard', WEEK_IN_SECONDS)->user();
+
 
         add_action('init', [$this, 'registerDashboard']);
 
@@ -49,7 +49,6 @@
     }
 
 	public function excludeDashboard(array $IDs):array {
-		$this->cache->flush();
 		$exclude = $this->cache->remember(
 			'dashboardIDs',
 			function() {
@@ -218,7 +217,7 @@
 			$page = $this->getCurrentPageTitle();
 			// Check if page exists in allowed pages
 			$allowedPages = $this->getUserAllowedPages();
-
+			error_log('Allowed pages: '.print_r($allowedPages, true));
 			if (!in_array($page, $allowedPages)) {
 				error_log("User not allowed to access page: {$page}");
 				$this->redirectToDashboard();
@@ -297,11 +296,10 @@
 	 */
 	protected function buildIntegrationPages(int $parentID):void
 	{
-		$integrations = JVB()->getAvailableServices(false);
-
-		foreach ($integrations as $name => $integration) {
+		$integrations = $this->getAvailableServices();
+		foreach ($integrations as $service) {
+			$integration = $this->getService($service);
 			$title = $integration->getTitle();
-
 			$slug = sanitize_title($title);
 			$this->createDashboardPage($slug, $title, $parentID);
 		}
@@ -360,7 +358,7 @@
 		}
 		$integrationSlugs = array_map(function($name) {
 			return sanitize_title(str_replace('_', '-', $name));
-		}, array_keys(JVB()->getAvailableServices(false)));
+		}, array_keys($this->getAvailableServices()));
 
 		// Check if this is an integration subpage
 		if (in_array($page, $integrationSlugs)) {
@@ -747,7 +745,7 @@
 			Registrar::withFeature('is_content', 'term')
 		);
 		$availableContent = array_filter($pages, function($page, $key) use($all) {
-			return !is_numeric($key) && in_array($key, $all) && JVB()->roles()->checkRole($this->user, $key);
+			return !is_numeric($key) && in_array($key, $all) && Roles::getInstance()()->checkRole($this->user, $key);
 		}, ARRAY_FILTER_USE_BOTH);
 		if (!empty ($availableContent)){
 			$content = $menu->addItem('Your Content', jvbDashIcon('book-bookmark'))
@@ -865,12 +863,13 @@
 
     public function renderIndex(string $content, string $page):string
     {
+		jvbDump($page);
 		if ($page !== '' && $page !== 'dash') {
 			return $content;
 		}
 
 		if (Site::has('referrals')) {
-			$whatever = JVB()->referrals()->getReferralWelcomeMessage($this->user->ID);
+			$whatever = Referrals::getInstance()->getReferralWelcomeMessage($this->user->ID);
 			if (!empty($whatever)) {
 				return $whatever;
 			}
@@ -932,18 +931,19 @@
 
 	protected function getIntegrationsMenu():string
 	{
-		$integrations = JVB()->getAvailableServices(false);
+		$integrations = $this->getAvailableServices();
 		$out = '';
 		if (!empty($integrations)) {
 			$out = '<nav class="integrations"><ul>';
 
 			$url = get_home_url(null, '/dash/integrations/');
 			$out .= '<li><a href="'.$url.'">'.jvbDashIcon('plugs-connected').'Integrations</a></li>';
-			foreach ($integrations as $name=> $integration) {
-				if (!JVB()->userCanConnect($name, $this->user->ID) || !$integration->hasDefaults()) {
+			foreach ($integrations as $service) {
+				$integration = $this->getService($service);
+				if (method_exists($integration, 'userCanConnect') && !$integration->userCanConnect($this->user->ID)) {
 					continue;
 				}
-				$link = sanitize_title(str_replace('_', '-',$name));
+				$link = sanitize_title(str_replace('_', '-',$service));
 				$out .= '<li><a href="'.$url.$link.'">'.jvbDashIcon($integration->icon).$integration->getTitle().'</a></li>';
 			}
 			$out .= '</ul></nav>';
@@ -962,23 +962,28 @@
 		if ($connection !== 'integrations') {
 
 			$userID = (Site::has('has_membership')) ? $this->user->ID : null;
-			$integration = JVB()->connect($connection, $userID);
-
-			echo '<h1>Managing '.$integration->title.'</h1>';
-			$integration->renderDefaults();
+			$integration = $this->getServiceUser($connection, $userID);
+			if (method_exists($integration, 'renderDefaults')) {
+				echo '<h1>Managing '.$integration->title.'</h1>';
+				$integration->renderDefaults();
+			}
 		} else {
 			?>
 			<section class="item-grid integrations">
 			<?php
-			$all = JVB()->getAvailableServices();
-			foreach ($all as $name) {
+
+			foreach ($this->getAvailableServices() as $name) {
 				if (current_user_can('manage_options')) {
 					$userID = null;
 				} else {
 					$userID = $this->user->ID;
 				}
-
-				JVB()->connect($name, $userID)->renderConnection();
+				$integration = $this->getService($name);
+				if (method_exists($integration, 'determineUser')
+					&& method_exists($integration, 'renderConnection')) {
+					$integration->determineUser();
+					$integration->renderConnection();
+				}
 			}
 			?>
 			</section>
@@ -1322,12 +1327,14 @@
 		}
 
 		if (!$user || !$this->userHasDashboardAccess($user)) {
+			error_log('No Dashboard Access');
 			return [];
 		}
 
 
 		$pages = $this->cache->get($userID);
 
+		$pages = false;
 		if ($pages === false || JVB_TESTING) {
 			if (user_can($userID, 'manage_options')) {
 				// Admin gets all pages as flat array
@@ -1340,6 +1347,7 @@
 			$pages = $this->getAllDashboardPages();
 
 			$canSkip = user_can($userID, 'skip_moderation');
+			jvbDump($pages, 'All Pages');
 			foreach($pages as $key => $slug) {
 				//Default to Remove pages
 				$remove = true;
@@ -1348,7 +1356,7 @@
 					$membership = Site::membership();
 					$type  = $registrar? $registrar->getType() : false;
 					if ($type) {
-						$permission = JVB()->roles()->getPermission('edit', $key);
+						$permission = Roles::getInstance()()->getPermission('edit', $key);
 					}
 					switch ($type) {
 						case 'content':
@@ -1358,7 +1366,7 @@
 							break;
 						case 'taxonomy':
 							$registrar = Registrar::getInstance($key);
-							if ($registrar && $registrar->hasFeature('is_content') && (!empty(JVB()->roles()->getOwnedTerms($userID, $key)) || !empty(JVB()->roles()->getManagedTerms($userID, $key)))){
+							if ($registrar && $registrar->hasFeature('is_content') && (!empty(Roles::getInstance()()->getOwnedTerms($userID, $key)) || !empty(Roles::getInstance()()->getManagedTerms($userID, $key)))){
 								$remove = false;
 							} else if (count(array_intersect($registrar->registrar->for, array_keys($pages))) > 0) {
 								$remove = false;
@@ -1435,6 +1443,7 @@
 								}
 							}
 							break;
+						case 'Account':
 						case 'dash':
 						case 'Referrals':
 						case 'favourites':

--
Gitblit v1.10.0