From 48721c85ebcfa973ee81719d2467ca80e4253dc9 Mon Sep 17 00:00:00 2001
From: Jake Vanderwerf <get@jakevanderwerf.ca>
Date: Fri, 01 May 2026 17:30:03 +0000
Subject: [PATCH] =Edmonton Ink hard test begins! Real testing of the managers and reset routes will commence. So far, just ensuring our classes are all loaded correctly: Site() and its sub-classes Membership, Login, etc. Care should be taken to load conditionally on 'init', as we finish defining most settings by 'plugins_loaded' at priority 5

---
 inc/managers/DashboardManager.php |   98 ++++++++++++++++++++++--------------------------
 1 files changed, 45 insertions(+), 53 deletions(-)

diff --git a/inc/managers/DashboardManager.php b/inc/managers/DashboardManager.php
index 1b5cb1c..4d3c544 100644
--- a/inc/managers/DashboardManager.php
+++ b/inc/managers/DashboardManager.php
@@ -2,10 +2,9 @@
 namespace JVBase\managers;
 
 use JVBase\forms\TaxonomySelector;
-use JVBase\managers\CRUD;
+use JVBase\base\Site;
 use JVBase\meta\Form;
-use JVBase\meta\Meta;
-use JVBase\registrar\Registrar;use JVBase\utility\Features;
+use JVBase\registrar\Registrar;
 use JVBase\ui\Navigation;
 use WP_User;
 
@@ -34,7 +33,7 @@
 		$this->cache->flush();
         $this->user = wp_get_current_user();
         $this->role = jvbUserRole($this->user->ID);
-        $this->userLink = (int)get_user_meta($this->user->ID, BASE.'link', true);
+        $this->userLink = (int)get_user_meta($this->user->ID, BASE.'profile_link', true);
 		$this->baseURL = get_home_url(null, '/dash');
 
     	add_action('template_redirect', [$this, 'handleRedirects']);
@@ -400,11 +399,11 @@
 //		if ($page === 'integrations' || in_array($page, $integrationSlugs)) {
 //			// Check integration access
 //			if ($page === 'integrations') {
-//				if (!Features::hasAnyIntegration('user', $this->role)) {
+//				if (!Site::hasAnyIntegration('user', $this->role)) {
 //					$this->redirectToDashboard();
 //				}
 //			} else {
-//				if (!Features::hasIntegration($page, 'user', $this->role)) {
+//				if (!Site::hasIntegration($page, 'user', $this->role)) {
 //					$this->redirectToDashboard();
 //				}
 //			}
@@ -530,7 +529,7 @@
 
             switch ($page) {
                 case 'notifications':
-					if (Features::forSite()->has('notifications')) {
+					if (Site::has('notifications')) {
 						wp_enqueue_script('jvb-notification-manager');
 					}
                     break;
@@ -570,7 +569,7 @@
 					wp_enqueue_script('jvb-crud');
 					break;
             }
-			if (Features::forSite()->has('favourites')) {
+			if (Site::has('favourites')) {
 				 wp_enqueue_script('jvb-favourites');
 				wp_localize_script('jvb-favourites-manager', 'favouritesSettings', [
 					'strings' => [
@@ -586,7 +585,7 @@
 
 			wp_enqueue_script('jvb-creator');
 
-			if (Features::forSite()->has('forum')) {
+			if (Site::has('forum')) {
 			wp_enqueue_script('jvb-news');
 			}
 			do_action('jvbDashScripts', $page);
@@ -648,7 +647,7 @@
         <!DOCTYPE html>
     <html <?php language_attributes(); ?>>
         <head>
-            <title><?= (array_key_exists('dashboard_title', JVB_SITE)) ? JVB_SITE['dashboard_title'] : 'Dashboard | '.get_bloginfo('name') ?></title>
+            <title><?= Site::dashboardTitle()??'Dashboard | '.get_bloginfo('name') ?></title>
             <meta charset="<?php bloginfo('charset'); ?>">
             <meta name="viewport" content="width=device-width, initial-scale=1.0">
             <?php
@@ -743,9 +742,12 @@
 
 		//Content
 			//content types
-				//Taxonomies
-		$availableContent = array_filter($pages, function($page, $key) {
-			return !is_numeric($key) && array_key_exists($key, Registrar::getRegistered('post'));
+		$all = array_merge(
+			Registrar::getRegistered('post'),
+			Registrar::getFeatured('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);
 		}, ARRAY_FILTER_USE_BOTH);
 		if (!empty ($availableContent)){
 			$content = $menu->addItem('Your Content', jvbDashIcon('book-bookmark'))
@@ -758,20 +760,25 @@
 				$item = $content->addItem($page, $registrar->getIcon())
 					->url($this->baseURL.'/'.$slug);
 
-				$taxonomies = $registrar->registrar->taxonomies;
-				if (!empty ($taxonomies)) {
-					//TODO: If we add a dedicated 'create item' page, remove this from the empty check
-					$itemMenu = $item->submenu($slug);
-					foreach ($taxonomies as $s) {
-						$taxRegistrar = Registrar::getInstance($s);
-						$itemMenu->addItem($taxRegistrar->getPlural(), $taxRegistrar->getIcon())
-							->url($this->baseURL.'/'.$s);
+				if ($registrar->getType() === 'post') {
+					$taxonomies = $registrar->registrar->taxonomies;
+					if (!empty ($taxonomies)) {
+						//TODO: If we add a dedicated 'create item' page, remove this from the empty check
+						$itemMenu = $item->submenu($slug);
+						foreach ($taxonomies as $s) {
+							$taxRegistrar = Registrar::getInstance($s);
+							$itemMenu->addItem($taxRegistrar->getPlural(), $taxRegistrar->getIcon())
+								->url($this->baseURL.'/'.$s);
+						}
 					}
 				}
 
+
 			}
 		}
 
+		//Taxonomies
+
 		//Settings
 		$settings = $menu->addItem('Settings', jvbDashIcon('faders'))
 			->submenu('settings')
@@ -859,7 +866,7 @@
 			return $content;
 		}
 
-		if (Features::forSite()->has('referrals')) {
+		if (Site::has('referrals')) {
 			$whatever = JVB()->referrals()->getReferralWelcomeMessage($this->user->ID);
 			if (!empty($whatever)) {
 				return $whatever;
@@ -973,7 +980,7 @@
 		$connection = (array_key_exists($page, $map)) ? $map[$page] : $page;
 		if ($connection !== 'integrations') {
 
-			$userID = (Features::forSite()->has('has_membership')) ? $this->user->ID : null;
+			$userID = (Site::has('has_membership')) ? $this->user->ID : null;
 			$integration = JVB()->connect($connection, $userID);
 
 			echo '<h1>Managing '.$integration->title.'</h1>';
@@ -1250,27 +1257,27 @@
 			$pages = [];
 			$pages[] = 'SEO';
 			// Add feature-dependent pages (non-config)
-			if (Features::forSite()->has('referrals')) {
+			if (Site::has('referrals')) {
 				$pages[] = 'Referrals';
 			}
-
-			if (Features::forMembership()->has('can_invite')) {
+			$membership = Site::membership();
+			if ($membership && $membership->has('can_invite')) {
 				$pages[] = 'Invites';
 			}
 
-			if (Features::forMembership()->has('term_approval')) {
+			if ($membership && $membership->has('term_approval')) {
 				$pages[] = 'Approvals';
 			}
 
-			if (Features::forMembership()->has('forum')) {
+			if ($membership && $membership->has('forum')) {
 				$pages[] = 'News';
 			}
 
-			if (Features::forMembership()->has('member_content')) {
+			if ($membership && $membership->has('member_content')) {
 				$pages[] = 'Metrics';
 			}
 
-			if (Features::forSite()->has('favourites')) {
+			if (Site::has('favourites')) {
 				$pages[] = 'Favourites';
 			}
 
@@ -1278,15 +1285,15 @@
 				$pages[] = 'Karmic Score';
 			}
 
-			if (Features::forSite()->has('notifications')) {
+			if (Site::has('notifications')) {
 				$pages[] = 'Notifications';
 			}
 
-			if (Features::forSite()->has('support')) {
+			if (Site::has('support')) {
 				$pages[] = 'Support';
 			}
 
-			if (Features::hasAnyIntegration()) {
+			if (Site::hasAnyIntegration()) {
 				$pages[] = 'Integrations';
 			}
 
@@ -1316,21 +1323,6 @@
 		return $pages;
 	}
 
-	/**
-	 * Get pages available to a specific role
-	 * @param string $role The role slug (with or without BASE prefix)
-	 * @return array
-	 */
-	protected function getRolePages(string $role):array
-	{
-		$role = jvbNoBase($role);
-
-		if (!Registrar::getInstance($role)){
-			return [];
-		}
-
-		return Features::forUser($role)->getDashboardPages();
-	}
 
 	/**
 	 * Get pages that a specific user is allowed to access
@@ -1394,7 +1386,7 @@
 					switch ($slug) {
 						case 'Integrations':
 							foreach($roles as $role) {
-								if (Features::hasAnyIntegration('user', $role)) {
+								if (Registrar::getInstance($role)->hasAnyIntegrations()) {
 									$remove = false;
 								}
 							}
@@ -1415,7 +1407,7 @@
 							break;
 						case 'Approvals':
 							$canApprove = false;
-							if (Features::forMembership()->has('term_approval')) {
+							if ($membership && $membership->has('term_approval')) {
 								if (array_key_exists('can_approve', JVB_MEMBERSHIP)) {
 									foreach ($roles as $role) {
 										if (in_array($role, JVB_MEMBERSHIP['can_approve'])) {
@@ -1446,14 +1438,14 @@
 							break;
 						case 'metrics':
 							foreach ($roles as $role) {
-								if (!empty(Features::forUser($role)->getCreatableContent())) {
+								if (!empty(Registrar::getInstance($role)?->getCreatable())) {
 									$remove = false;
 								}
 							}
 							break;
 						case 'karmic-score':
 							foreach ($roles as $role) {
-								$contents = Features::forUser($role)->getCreatableContent();
+								$contents = Registrar::getInstance($role)?->getCreatable();
 								if (!empty($contents)) {
 									$hasKarma = Registrar::getFeatured('karma');
 									$remove = empty(array_intersect($contents, $hasKarma));
@@ -1502,7 +1494,7 @@
 
 		$creatable = [];
 		foreach ($roles as $role) {
-			$roleCreatable = Features::forUser($role)->getCreatableContent();
+			$roleCreatable = Registrar::getInstance($role)?->getCreatable();
 			$creatable = array_merge($creatable, $roleCreatable);
 		}
 

--
Gitblit v1.10.0