From b38f03c0e7218762d90fa5092696b127f24f36db Mon Sep 17 00:00:00 2001
From: Jake Vanderwerf <get@jakevanderwerf.ca>
Date: Sun, 25 Jan 2026 07:07:26 +0000
Subject: [PATCH] =Some logical flaws in Queue.php, Queue.js, ContentExecutor.php, UploadExecutor.php - particularly with timeline ordering, frontend queue updates, etc

---
 inc/managers/IconsManager.php |   48 ++++++++++++++++++++++++++++++++----------------
 1 files changed, 32 insertions(+), 16 deletions(-)

diff --git a/inc/managers/IconsManager.php b/inc/managers/IconsManager.php
index 4415bc7..2f66a45 100644
--- a/inc/managers/IconsManager.php
+++ b/inc/managers/IconsManager.php
@@ -18,7 +18,7 @@
 	// Instance-specific properties
 	protected string $source;
 	protected array $icons = []; // Icons for THIS source [style => [names]]
-	protected CacheManager $cache;
+	protected Cache $cache;
 	protected string $style = 'regular';
 	protected array $styles = ['regular', 'bold', 'duotone', 'fill', 'light', 'thin'];
 	protected array $customIcons = []; // Custom icons for THIS source
@@ -42,7 +42,7 @@
 	private function __construct(string $source)
 	{
 		$this->source = $source;
-		$this->cache = CacheManager::for('icons_' . $source, WEEK_IN_SECONDS);
+		$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';
@@ -385,7 +385,7 @@
 	 */
 	protected function registerGlobalHooks(): void
 	{
-		add_action('init', [$this, 'checkCSS']);
+		add_action('wp_loaded', [self::class, 'checkCSS']);
 	}
 
 	/**
@@ -410,7 +410,7 @@
 		wp_enqueue_style('jvb-icons-'.$this->source);
 	}
 
-	public function checkCSS(): void
+	public static function checkCSS(): void
 	{
 		$needsUpdate = get_option(BASE.'icons_needs_update', []);
 		if (!empty($needsUpdate)) {
@@ -420,7 +420,7 @@
 		}
 	}
 
-	protected static function regenerateAllCSS(array $sourcesToUpdate = []): void
+	public static function regenerateAllCSS(array $sourcesToUpdate = []): void
 	{
 		error_log('[IconsManager]:regenerateCSS');
 		$css_dir = JVB_CHILD_DIR.'/assets/css/';
@@ -429,28 +429,41 @@
 			wp_mkdir_p($css_dir);
 		}
 
+		// Load all icons from database option
+		$allIcons = get_option(BASE.'usedIcons', []);
+
 		// If no specific sources provided, regenerate all
 		if (empty($sourcesToUpdate)) {
-			$sourcesToUpdate = array_fill_keys(array_keys(self::$instances), true);
+			$sourcesToUpdate = array_fill_keys(array_keys($allIcons), true);
 		}
 
-		// Generate CSS only for sources that need it
-		foreach (self::$instances as $source => $instance) {
-			if (!isset($sourcesToUpdate[$source])) {
+		// Generate CSS for each source that needs it
+		foreach ($sourcesToUpdate as $source => $needsUpdate) {
+			if (!$needsUpdate || !isset($allIcons[$source])) {
 				continue;
 			}
 
+			// Get or create instance for this source
+			$instance = self::for($source);
+
+			// Temporarily set icons from database
+			$originalIcons = $instance->icons;
+			$instance->icons = $allIcons[$source];
+
 			$css = $instance->generateIconCSS();
 			$css_path = $css_dir . $source . '.css';
 
 			$instance->archiveCurrentVersion($css);
 
 			if (file_put_contents($css_path, $css) !== false) {
-				CacheManager::updateTimestamp('icons_' . $source);
+				Cache::touch('icons_' . $source);
 				error_log("[IconsManager] Updated {$source}.css");
 			} else {
 				error_log("[IconsManager] Could not write {$source}.css");
 			}
+
+			// Restore original icons
+			$instance->icons = $originalIcons;
 		}
 	}
 
@@ -481,7 +494,7 @@
 			$instance->archiveCurrentVersion($css);
 
 			if (file_put_contents($css_path, $css) !== false) {
-				CacheManager::updateTimestamp('icons_' . $source);
+				Cache::touch('icons_' . $source);
 				error_log("[IconsManager] Updated {$source}.css");
 			} else {
 				error_log("[IconsManager] Could not write {$source}.css");
@@ -516,6 +529,10 @@
 	 */
 	public function get(string $name, array $options = []): string
 	{
+		if ($name === '') {
+			//No icon requested
+			return '';
+		}
 		$style = $options['style'] ?? $this->style;
 		$name = $this->map[$name] ?? $name;
 
@@ -640,7 +657,7 @@
 
 	public function registerStyle(): void
 	{
-		$timestamp = CacheManager::getTimestamp('icons_' . $this->source);
+		$timestamp = Cache::lastModified('icons_' . $this->source);
 		$handle = 'jvb-icons-' . $this->source;
 
 		wp_register_style(
@@ -723,8 +740,7 @@
 
 		// Clear cache for all sources
 		foreach (self::$instances as $source => $instance) {
-			$instance->cache->delete('icon_styles_css');
-			CacheManager::updateTimestamp('icons_' . $source);
+			$instance->cache->forget('icon_styles_css');
 		}
 	}
 
@@ -778,7 +794,7 @@
 				if (file_put_contents($css_path, $entry['css']) !== false) {
 					$this->icons = $entry['iconList'];
 					$this->saveIcons();
-					CacheManager::updateTimestamp('icons_' . $this->source);
+					Cache::touch('icons_' . $this->source);
 					return true;
 				}
 
@@ -799,7 +815,7 @@
 		}
 		$needsUpdate[$this->source] = true;
 		update_option(BASE.'icons_needs_update', $needsUpdate);
-		CacheManager::updateTimestamp('icons_' . $this->source);
+		Cache::touch('icons_' . $this->source);
 	}
 
 	public function mergeVersions(array $timestamps): bool

--
Gitblit v1.10.0