Jake Vanderwerf
2026-02-17 a24a06002081ad71a78ffeff9072725ba39cf121
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,18 +19,19 @@
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']);
        }
      $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);
@@ -210,6 +213,7 @@
         $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();
@@ -353,14 +357,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 '';
    }
@@ -513,8 +517,8 @@
      if (!is_singular(BASE.'dash') && !is_post_type_archive(BASE.'dash')) {
            return;
        }
      wp_enqueue_style('jvb-icons-dash');
      wp_enqueue_style('jvb-icons-forms');
      IconsManager::for('forms')->enqueueIconStyles();
      IconsManager::for('dash')->enqueueIconStyles();
      wp_enqueue_script('jvb-form');
      wp_enqueue_script('jvb-selector');
@@ -535,28 +539,28 @@
               break;
                case 'admin':
                case 'dash':
                    if (current_user_can('manage_options') && apply_filters('jvbAdminDashboard', '') === '') {
                        wp_enqueue_script(
                        'jvb-admin',
                        JVB_URL . 'assets/js/min/admin.min.js',
                        [
                            'jvb-queue',
                            'jvb-loading'
                        ],
                        [
                            'strategy' => 'defer',
                            'in_footer' => true
                        ]
                    );
//                    if (current_user_can('manage_options') && apply_filters('jvbAdminDashboard', '') === '') {
//                        wp_enqueue_script(
//                        'jvb-admin',
//                        JVB_URL . 'assets/js/min/admin.min.js',
//                        [
//                            'jvb-queue',
////                            'jvb-loading'
//                        ],
//                        [
//                            'strategy' => 'defer',
//                            'in_footer' => true
//                        ]
//                    );
                    wp_localize_script(
                        'jvb-admin',
                        'jvbAdmin',
                        [
                            'nonce' => wp_create_nonce('itsme')
                        ]
                    );
                    }
//                    wp_localize_script(
//                        'jvb-admin',
//                        'jvbAdmin',
//                        [
//                            'nonce' => wp_create_nonce('itsme')
//                        ]
//                    );
//                    }
               break;
            case 'seo':
               wp_enqueue_script('jvb-schema');
@@ -597,8 +601,7 @@
        if (!$post) {
            return '';
        }
        return $post->post_title;
        return html_entity_decode($post->post_title);
    }
   protected function getCurrentPageSlug():string
    {
@@ -871,7 +874,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;
@@ -1127,7 +1130,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">
@@ -1197,7 +1199,7 @@
                            <?php
                            $config['type'] = 'text';
                            $config['description'] = '';
                            $meta->render('form', $n, $config);
                            Form::render($n, null, $config);
                            ?>
                        </td>
                        <?php
@@ -1212,10 +1214,9 @@
        echo jvbNewModal(
            'edit-modal '.$type,
            'Edit '.ucfirst($type),
            $meta->renderForm('admin', [], $fields)
            jvbRenderForm('admin', $fields)
        );
        }
      return ob_get_clean();
    }
@@ -1347,15 +1348,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);
@@ -1477,7 +1477,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;
@@ -1551,20 +1551,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();
      }
   }
}