From 2127b1bdd73ecd2423e443992da4b442f5a3c1a3 Mon Sep 17 00:00:00 2001
From: Jake Vanderwerf <get@jakevanderwerf.ca>
Date: Wed, 04 Feb 2026 21:19:25 +0000
Subject: [PATCH] =Major overhaul of MetaManager.php -> Meta.php and RestRouteManager.php -> Rest.php. Seems to work for JakeVan

---
 inc/managers/DashboardManager.php |  106 ++++++++++++++++++++++++++---------------------------
 1 files changed, 52 insertions(+), 54 deletions(-)

diff --git a/inc/managers/DashboardManager.php b/inc/managers/DashboardManager.php
index 6f1f337..c2867aa 100644
--- a/inc/managers/DashboardManager.php
+++ b/inc/managers/DashboardManager.php
@@ -1,8 +1,10 @@
 <?php
 namespace JVBase\managers;
 
-use JVBase\forms\TaxonomySelector;use JVBase\managers\CRUD;
-use JVBase\meta\MetaManager;
+use JVBase\forms\TaxonomySelector;
+use JVBase\managers\CRUD;
+use JVBase\meta\Form;
+use JVBase\meta\Meta;
 use JVBase\utility\Features;
 use JVBase\ui\Navigation;
 use WP_User;
@@ -17,14 +19,14 @@
 class DashboardManager
 {
     protected WP_User $user;
-    protected CacheManager $cache;
+    protected Cache $cache;
     protected string $role;
 	protected string $baseURL;
     protected int $userLink;
 
     public function __construct()
     {
-        $this->cache = CacheManager::for('dashboard', WEEK_IN_SECONDS);
+        $this->cache = Cache::for('dashboard', WEEK_IN_SECONDS)->connect('user');
         add_action('init', [$this, 'registerDashboard']);
         if (!$this->isRegistered()) {
             add_action('init', [$this, 'buildDashboard']);
@@ -67,18 +69,21 @@
         $singular = 'Dashboard';
         register_post_type(BASE.'dash', array(
             'labels'                => [
-                'name' => $plural,
-                'singular_name' => $singular,
-                'menu_name' => $plural,
-                'add_new' => "Add New {$singular}",
-                'add_new_item' => "Add New {$singular}",
-                'edit_item' => "Edit {$singular}",
-                'new_item' => "New {$singular}",
-                'view_item' => "View {$singular}",
-                'search_items' => "Search {$plural}",
-                'not_found' => "No {$plural} found",
-                'not_found_in_trash' => "No {$plural} found in Trash"
-            ],
+				'name'               => $plural,
+				'singular_name'      => $singular,
+				'menu_name'          => $plural,
+				'name_admin_bar'     => $singular,
+				'add_new'            => "Add New",
+				'add_new_item'       => "Add New {$singular}",
+				'new_item'           => "New {$singular}",
+				'edit_item'          => "Edit {$singular}",
+				'view_item'          => "View {$singular}",
+				'all_items'          => "All {$plural}",
+				'search_items'       => "Search {$plural}",
+				'parent_item_colon'  => "Parent {$plural}:",
+				'not_found'          => "No {$plural} found.",
+				'not_found_in_trash' => "No {$plural} found in Trash.",
+			],
             'menu_icon'             => jvbCSSIcon('gauge'),
             'public'                => true,
             'publicly_queryable'    => true,
@@ -100,12 +105,24 @@
      */
     public function redirectFromAdmin()
     {
+		// Skip if already processing a redirect
+		if (defined('DOING_AJAX') && DOING_AJAX) {
+			return;
+		}
+
+		// Ensure user is fully loaded
+		if (!did_action('wp_loaded')) {
+			return;
+		}
+
         // Allow admins to access wp-admin if needed
         if (current_user_can('manage_options')) {
             return;
         }
         // Redirect to custom dashboard
-       	$this->redirectToDashboard();
+       	if (is_user_logged_in() && isOurPeople()) {
+			$this->redirectToDashboard();
+		}
     }
 
 	protected function redirectToLogin():void
@@ -195,10 +212,10 @@
 			$page = $this->getCurrentPageTitle();
 			// Check if page exists in allowed pages
 			$allowedPages = $this->getUserAllowedPages();
+
 			if (!in_array($page, $allowedPages)) {
 				error_log("User not allowed to access page: {$page}");
 				$this->redirectToDashboard();
-				return;
 			}
 		}
 	}
@@ -339,14 +356,14 @@
 			// Pass along to the Integrations template handler which knows to check for subpages
 			$page = 'integrations';
 		}
-		echo $this->renderDashboard($page);
-		//TODO: Reenable
-//		echo $this->cache->remember(
-//			$page,
-//		 	function() use ($page) {
-//				return $this->renderDashboard($page);
-//		 	}
-//		);
+//		echo $this->renderDashboard($page);
+
+		echo $this->cache->remember(
+			$page,
+		 	function() use ($page) {
+				return $this->renderDashboard($page);
+		 	}
+		);
 
 		return '';
     }
@@ -583,8 +600,7 @@
         if (!$post) {
             return '';
         }
-
-        return $post->post_title;
+        return html_entity_decode($post->post_title);
     }
    protected function getCurrentPageSlug():string
     {
@@ -680,6 +696,7 @@
                 <ul>
                     <?= jvbNotificationMenu() ?>
                     <?= jvbHelpMenu() ?>
+                    <li><a href="<?=wp_logout_url(get_home_url())?>" title="Logout"><?=jvbIcon('sign-out')?></a></li>
                 </ul>
             </nav>
         </header>
@@ -856,7 +873,7 @@
 
         echo '<h2>What would you like to do today?</h2>';
 
-        echo '<ul>';
+        echo '<ul class="dashboard">';
         foreach ($pages as $slug => $page) {
 			if ($page === 'dash') {
 				continue;
@@ -1112,7 +1129,6 @@
     $jvb_everything = array_merge(JVB_CONTENT, JVB_TAXONOMY);
 
     foreach ($jvb_everything as $type => $settings) {
-        $meta = new MetaManager(null, 'form');
         $fields = jvbGetFields($type);
         ?>
         <template class="<?= $type ?>Table">
@@ -1182,7 +1198,7 @@
                             <?php
                             $config['type'] = 'text';
                             $config['description'] = '';
-                            $meta->render('form', $n, $config);
+                            Form::render($n, null, $config);
                             ?>
                         </td>
                         <?php
@@ -1197,10 +1213,9 @@
         echo jvbNewModal(
             'edit-modal '.$type,
             'Edit '.ucfirst($type),
-            $meta->renderForm('admin', [], $fields)
+            jvbRenderForm('admin', $fields)
         );
         }
-
 		return ob_get_clean();
     }
 
@@ -1332,15 +1347,14 @@
 		}
 
 
-		$cacheKey = "user_pages_{$userID}";
-		$pages = $this->cache->get($cacheKey);
-		$pages = false;
+		$pages = $this->cache->get($userID);
+
 		if ($pages === false || JVB_TESTING) {
 			if (user_can($userID, 'manage_options')) {
 				// Admin gets all pages as flat array
 				$pages = $this->getAllDashboardPages();
 				// Extract just the values (slugs)
-				$this->cache->set($cacheKey, $pages, WEEK_IN_SECONDS);
+				$this->cache->set($userID, $pages, WEEK_IN_SECONDS);
 				return $pages;
 			}
 			$roles = array_map('jvbNoBase', $user->roles);
@@ -1462,7 +1476,7 @@
 			$pages = apply_filters('jvbUserDashboardPages', $pages, $user->roles, $userID);
 			$pages = array_unique($pages);
 
-			$this->cache->set($cacheKey, $pages, WEEK_IN_SECONDS);
+			$this->cache->set($userID, $pages, WEEK_IN_SECONDS);
 		}
 
 		return $pages;
@@ -1536,20 +1550,4 @@
 		// Default to edit_{type}s
 		return 'edit_'.$type.'s';
 	}
-
-	/**
-	 * Invalidate dashboard page cache for a user or all users
-	 * Call this when user roles or permissions change
-	 * @param int|null $userID Specific user to invalidate, null for all
-	 * @return void
-	 */
-	public function invalidatePagesCache(?int $userID = null):void
-	{
-		if ($userID !== null) {
-			$this->cache->delete("user_pages_{$userID}");
-		} else {
-			// Invalidate all user caches by invalidating the group
-			$this->cache->invalidate();
-		}
-	}
 }

--
Gitblit v1.10.0