Jake Vanderwerf
7 days ago 46d681c6b825d21b3f698d793c4e630c687d90ad
inc/managers/IconsManager.php
@@ -1,7 +1,8 @@
<?php
namespace JVBase\managers;
use JVBase\utility\Features;
use JVBase\registrar\Registrar;
use JVBase\base\Site;
if (!defined('ABSPATH')) {
   exit;
@@ -43,9 +44,7 @@
   {
      $this->source = $source;
      $this->cache = Cache::for('icons_' . $source, WEEK_IN_SECONDS);
      $this->style = (array_key_exists('icons', JVB_SITE) && in_array(JVB_SITE['icons'], $this->styles))
         ? JVB_SITE['icons']
         : 'regular';
      $this->style = Site::icon();
      $this->addMap();
@@ -145,6 +144,7 @@
            'apple-logo',
            'check-circle',
            'close-circle',
            'faders-horizontal',
            'cloud-slash',
            'exclamation-mark',
            'cloud-arrow-down',
@@ -195,15 +195,11 @@
//       ]
      ];
      // Add icons from content/taxonomy/user configs (like old behavior)
      $configIcons = $this->getIconsFromConfigs();
      if (!empty($configIcons)) {
         foreach ($configIcons as $source => $icons) {
            if (!isset($defaults[$source])) {
               $defaults[$source] = [];
            }
            $defaults[$source] = array_merge($defaults[$source], $icons);
         }
         $defaults['icons'] = array_merge($defaults['icons'], $configIcons);
      }
      // Allow filtering per source (extensibility)
@@ -214,35 +210,27 @@
      if (isset($allIcons[$this->source])) {
         $icons = array_merge($icons, $allIcons[$this->source]);
      }
      if (!empty($icons)) {
         $this->include($icons);
      }
   }
   /**
    * Get icons from JVB_CONTENT, JVB_TAXONOMY, JVB_USER configs
    * Get icons from Registrar instances
    *
    */
   protected function getIconsFromConfigs(): array
   {
      $icons = [];
      $check = [JVB_CONTENT, JVB_TAXONOMY, JVB_USER];
      $registered = Registrar::getRegistered();
      foreach ($check as $constant) {
         foreach ($constant as $key => $value) {
            if (isset($value['icon'])) {
               // Determine source based on context (you could add 'icon_source' to configs)
               $source = $value['icon_source'] ?? 'icons';
               if (!isset($icons[$source])) {
                  $icons[$source] = [];
               }
               $icons[$source][] = $value['icon'];
            }
         }
      foreach ($registered as $type) {
         $registrar = Registrar::getInstance($type);
         $icons[] = $registrar->getIcon();
      }
      return $icons;
      return array_unique(array_filter($icons));
   }
   /**
@@ -362,16 +350,16 @@
         $map = [
            'seo' => 'robot'
         ];
         if (Features::forSite()->has('referrals')) {
         if (Site::has('referrals')) {
            $map['referrals'] = 'hand-heart';
         }
         if (Features::forSite()->has('dashboard')) {
         if (Site::has('dashboard')) {
            $map['dash'] = 'door';
         }
         if (Features::forSite()->has('magicLink')) {
         if (Site::has('magicLink')) {
            $map['magicLink'] = 'magic-wand';
         }
         if (Features::hasAnyIntegration()) {
         if (Site::hasAnyIntegration()) {
            $map['integrations'] = 'plugs-connected';
         }
         update_option(BASE.'iconMap', $map);
@@ -386,6 +374,7 @@
   protected function registerGlobalHooks(): void
   {
      add_action('wp_loaded', [self::class, 'checkCSS']);
      add_action('shutdown', [self::class, 'checkCSS']);
   }
   /**
@@ -407,7 +396,10 @@
   public function enqueueIconStyles():void
   {
      wp_enqueue_style('jvb-icons-'.$this->source);
//    if (file_exists(JVB_CHILD_URL . "assets/css/{$this->source}.css")){
         wp_enqueue_style('jvb-icons-'.$this->source);
//    }
   }
   public static function checkCSS(): void
@@ -529,7 +521,7 @@
    */
   public function get(string $name, array $options = []): string
   {
      if ($name === '') {
      if (empty($name)) {
         //No icon requested
         return '';
      }
@@ -633,7 +625,7 @@
   /**
    * Get raw SVG content for CSS mask-image
    */
   protected function getRawSvg(string $name, ?string $style = null): ?string
   public function getRawSvg(string $name, ?string $style = null): ?string
   {
      if (!$style) {
         $style = $this->style;
@@ -680,6 +672,15 @@
         foreach ($names as $icon) {
            $svg = $this->getEncodedSVG($icon, $style);
            if ($svg !== '') {
               if ($icon === 'caret-down') {
                  $css .= 'details summary::after,';
               } elseif ($icon === 'faders-horizontal') {
                  $css .= 'details.all-filters summary::after,';
               } elseif ($icon === 'link') {
                  $css .= 'input[type=url],';
               } elseif ($icon === apply_filters('jvbSeparatorLogo', 'logo')) {
                  $css .= 'hr.logo::before,';
               }
               $css .= ".icon-{$icon}{$styleClass}{";
               $css .= "--icon:url('data:image/svg+xml;base64,{$svg}');";
               $css .= "}";
@@ -707,6 +708,14 @@
      if (!$style) {
         $style = $this->style;
      }
      $icon = $this->map[$icon] ?? $icon;
      // Validate icon exists
      if (!$this->iconExists($icon, $style)) {
         error_log('[IconsManager] Icon not found: ' . $icon);
         return '';
      }
      $svg = $this->getEncodedSVG($icon, $style);
      if ($svg !== '') {
         return "data:image/svg+xml;base64,{$svg}";