Jake Vanderwerf
2026-08-28 a9654f00c8fbc9934289d761843ddd071025013f
inc/admin/Integrations.php
@@ -1,17 +1,24 @@
<?php
namespace JVBase\admin;
use JVBase\integrations\ServiceMap;
use JVBase\managers\IconsManager;
use JVBase\registrar\Registrar;
if (!defined('ABSPATH')) {
   exit;
}
class Integrations
{
   use ServiceMap;
   public function __construct()
   {
      // Hook into WordPress admin
      add_action('admin_menu', [$this, 'registerAdminPages']);
      add_action('admin_enqueue_scripts', [$this, 'enqueueAdminAssets']);
      add_action(BASE.'dashboard_page_integrations', [$this, 'renderDashPage'], 10);
   }
   /**
@@ -30,17 +37,15 @@
      );
      // Add submenu pages for configured integrations
      $integrations = JVB()->getAvailableServices(false);
      foreach($integrations as $service => $integration) {
//       if ($integration->isSetUp() && !empty($integration->enabledContentTypes())) {
         if (!empty($integration->enabledContentTypes())) {
      foreach ($this->getAvailableServices() as $service) {
         $integration = $this->getService($service);
         if ($integration->isSetUp() && method_exists($integration, 'getAllowedContent') && !empty($integration->getAllowedContent())) {
            add_submenu_page(
               'jvb-integrations',
               $integration->getTitle() . ' Defaults',
               $integration->getTitle(),
               'manage_options',
               'jvb-integration-'.$service,
               'jvb-integration-'.$integration->getServiceName(),
               [$integration, 'renderDefaults']
            );
         }
@@ -64,22 +69,38 @@
      wp_enqueue_script(
         'jvb-admin-scripts',
         JVB_URL . 'assets/js/min/integrations.min.js',
         [],
         ['jvb-auth'],
         '1.0.0',
         true
      );
      wp_localize_script(
         'jvb-admin-scripts',
         'jvbSettings',
         [
            'api'    => rest_url('jvb/v1/'),
            'currentUser'  => get_current_user_id(),
            'nonce'  => wp_create_nonce('wp_rest'),
         ]
      );
      IconsManager::for()->enqueueIconStyles();
      IconsManager::for('dash')->enqueueIconStyles();
      IconsManager::for('forms')->enqueueIconStyles();
      $queue = [
         'api' => rest_url('jvb/v1/'),
         'redirect' => wp_login_url(home_url(add_query_arg(null, null))),
         'labels' => Registrar::getLabels(),
      ];
      wp_localize_script('jvb-auth', 'jvbSettings', $queue);
//
//    wp_localize_script(
//       'jvb-admin-scripts',
//       'jvbSettings',
//       [
//          'api'    => rest_url('jvb/v1/'),
//          'currentUser'  => get_current_user_id(),
//          'nonce'  => wp_create_nonce('wp_rest'),
//       ]
//    );
   }
   public function renderDashPage():void
   {
      $this->renderPage();
   }
   /**
    * Render the main integrations page
    */
@@ -92,23 +113,30 @@
         <div class="jvb-admin-content">
            <?php
            // Display any admin notices from form submissions
            settings_errors('jvb_integrations');
            if (is_admin()) {
               settings_errors('jvb_integrations');
            }
            $this->displayNotices();
            ?>
            <div class="item-grid integrations">
               <?php
               $integrations = JVB()->getAvailableServices(false);
               foreach ($this->getAvailableServices() as $service) {
                  $integration = $this->getService($service);
                  if ($integration->isSetUp() && method_exists($integration, 'renderConnection')) {
                     $integration->renderConnection();
                  }
               }
               foreach ($integrations as $service => $integration):
                  $integration->renderConnection();
               endforeach;
               ?>
            </div>
         </div>
      </div>
      <?php $this->renderStyles(); ?>
      <?php if (is_admin()) {
         $this->renderStyles();
      } ?>
      <?php
   }
@@ -247,7 +275,7 @@
            --mt: 1rem;
            --mb: 1rem;
            --setMargin: var(--mt) var(--mr) var(--mb) var(--ml);
            --insetMargin: var(--mt) calc((var(--maxWidth) - var(--narrow)) / 2 + var(--mr)) var(--mb) var(--ml);
            --insetMargin: var(--mt) calc((var(--content) - var(--narrow)) / 2 + var(--mr)) var(--mb) var(--ml);
            --height: 4rem;
            --doubleHeight: 8rem;
            --offHeight: 5rem;
@@ -388,10 +416,10 @@
            --scrollbar-width: 8px;
            --scrollbar-track-color: var(--base-100);
            --scrollbar-thumb-color: var(--action-0);
            --scrollbar-thumb-hover-color: var(--action-50);
            --scrollbar-thumb-border: 2px solid var(--base-50);
            --scrollbar-track-color: rgb(var(--base-100));
            --scrollbar-thumb-color: rgb(var(--action-0));
            --scrollbar-thumb-hover-color: rgb(var(--action-50));
            --scrollbar-thumb-border: 2px solid rgb(var(--base-50));
            --scrollbar-border-radius: 4px;
         }
         .item-grid.integrations {