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/AdminPages.php |  147 +++++++++++++++++++++---------------------------
 1 files changed, 64 insertions(+), 83 deletions(-)

diff --git a/inc/managers/AdminPages.php b/inc/managers/AdminPages.php
index 1e42e8c..cf42870 100644
--- a/inc/managers/AdminPages.php
+++ b/inc/managers/AdminPages.php
@@ -98,10 +98,10 @@
 
 		switch ($action) {
 			case 'flush-all':
-				wp_cache_flush();
+				$total = Cache::flushAll();
 				return new \WP_REST_Response([
 					'success' => true,
-					'message' => 'All caches flushed successfully'
+					'message' => $total.' caches flushed successfully'
 				]);
 
 			case 'flush-cache':
@@ -113,7 +113,7 @@
 					], 400);
 				}
 
-				\JVBase\managers\CacheManager::invalidateAll($group);
+				Cache::for($group)?->flush();
 
 				return new \WP_REST_Response([
 					'success' => true,
@@ -134,17 +134,32 @@
 	public function handleIconAction(\WP_REST_Request $request): \WP_REST_Response
 	{
 		$action = sanitize_text_field($request->get_param('action'));
-		$source = sanitize_text_field($request->get_param('source') ?? 'icons'); // Add source param
-		$icons = \JVBase\managers\IconsManager::for($source);
+		$source = sanitize_text_field($request->get_param('source') ?? 'icons');
+		$icons = IconsManager::for($source);
 
 		switch ($action) {
 			case 'refresh-icons':
+				// Force regenerate CSS immediately
 				$icons->forceRefresh();
+				IconsManager::regenerateAllCSS([$source => true]);
+
 				return new \WP_REST_Response([
 					'success' => true,
 					'message' => "Icon CSS regenerated successfully for '{$source}'"
 				]);
 
+			case 'refresh-all-icons':
+				// Regenerate all icon sources
+				foreach (['icons', 'forms', 'dash'] as $src) {
+					IconsManager::for($src)->forceRefresh();
+				}
+				IconsManager::regenerateAllCSS();
+
+				return new \WP_REST_Response([
+					'success' => true,
+					'message' => 'All icon CSS files regenerated successfully'
+				]);
+
 			case 'restore-icon-version':
 				$timestamp = (int)$request->get_param('timestamp');
 				if (empty($timestamp)) {
@@ -186,6 +201,9 @@
 				}
 
 				if ($icons->mergeVersions($timestamps)) {
+					// Regenerate CSS after merge
+					IconsManager::regenerateAllCSS([$source => true]);
+
 					return new \WP_REST_Response([
 						'success' => true,
 						'message' => 'Icon versions merged successfully'
@@ -659,20 +677,22 @@
 
 	public function renderCachePage():void
 	{
-		$connections = CacheManager::getAllConnections();
+		$groups = Cache::getAllGroups();
 
 		// Separate generic vs. specific caches
 		$generic_groups = [];
 		$content_specific = [];
 		$nonce = wp_create_nonce('wp_rest');
 
-		foreach ($connections as $group => $configs) {
-			$is_generic = !$this->isBoundToContentOrTaxonomy($group);
+		// Separate by type
+		$generic = [];
+		$specific = [];
 
-			if ($is_generic) {
-				$generic_groups[$group] = $configs;
+		foreach ($groups as $group => $data) {
+			if ($this->isBoundToContentOrTaxonomy($group)) {
+				$specific[$group] = $data;
 			} else {
-				$content_specific[$group] = $configs;
+				$generic[$group] = $data;
 			}
 		}
 
@@ -728,7 +748,7 @@
 					</tr>
 					</thead>
 					<tbody>
-					<?php foreach ($content_specific as $group => $configs): ?>
+					<?php foreach ($specific as $group => $configs): ?>
 						<tr>
 							<td><strong><?= esc_html($group); ?></strong></td>
 							<td><?= $this->formatConnections($configs); ?></td>
@@ -739,6 +759,19 @@
 							</td>
 						</tr>
 					<?php endforeach; ?>
+					<?php foreach ($generic as $group => $data): ?>
+						<tr>
+							<td><strong><?= esc_html($group); ?></strong></td>
+							<td><?= $this->formatConnections($data); ?></td>
+							<td>
+								<button type="button" class="button"
+										data-action="flush-cache"
+										data-group="<?= esc_attr($group); ?>">
+									<?= jvbDashIcon('trash'); ?> Flush
+								</button>
+							</td>
+						</tr>
+					<?php endforeach; ?>
 					</tbody>
 				</table>
 			</details>
@@ -820,15 +853,24 @@
 		return false;
 	}
 
-	protected function formatConnections(array $configs): string
+	protected function formatConnections(array $data): string
 	{
-		$connections = [];
-		foreach ($configs as $config) {
-			$parent = $config['parent'] ?? 'unknown';
-			$scope = $config['scope'] ?? 'id';
-			$connections[] = "{$parent} ({$scope})";
+		$parts = [];
+
+		if (!empty($data['connects_to'])) {
+			$targets = array_map(function($conn) {
+				$flush_text = $conn['flush'] ? ' (flush all)' : '';
+				return $conn['group'] . $flush_text;
+			}, $data['connects_to']);
+			$parts[] = '<strong>Invalidates:</strong> ' . implode(', ', $targets);
 		}
-		return esc_html(implode(', ', $connections));
+
+		if (!empty($data['connected_from'])) {
+			$sources = array_map(fn($conn) => $conn['group'], $data['connected_from']);
+			$parts[] = '<strong>Invalidated by:</strong> ' . implode(', ', $sources);
+		}
+
+		return $parts ? implode('<br>', $parts) : 'No connections';
 	}
 
 	public function handleCacheActions($response, $request, $action):WP_REST_Response
@@ -854,7 +896,8 @@
 				], 400);
 			}
 
-			\JVBase\managers\CacheManager::invalidateAll($group);
+			$group = sanitize_text_field($request->get_param('group'));
+			Cache::invalidateGroup($group);
 
 			return new WP_REST_Response([
 				'success' => true,
@@ -862,68 +905,6 @@
 			]);
 		}
 
-		if ($action === 'merge-icon-versions') {
-			$timestamps = $request->get_param('timestamps');
-
-			if (empty($timestamps) || !is_array($timestamps)) {
-				return new WP_REST_Response([
-					'success' => false,
-					'message' => 'No versions selected for merging'
-				], 400);
-			}
-
-			// Convert to integers
-			$timestamps = array_map('intval', $timestamps);
-
-			if (count($timestamps) < 2) {
-				return new WP_REST_Response([
-					'success' => false,
-					'message' => 'Please select at least 2 versions to merge'
-				], 400);
-			}
-
-			$icons = \JVBase\managers\IconsManager::getInstance();
-
-			if ($icons->mergeVersions($timestamps)) {
-				return new WP_REST_Response([
-					'success' => true,
-					'message' => 'Icon versions merged successfully'
-				]);
-			}
-
-			return new WP_REST_Response([
-				'success' => false,
-				'message' => 'Failed to merge icon versions'
-			], 500);
-		}
-
-		if ($action === 'refresh-icons') {
-			$icons = \JVBase\managers\IconsManager::getInstance();
-			$icons->forceRefresh();
-
-			return new WP_REST_Response([
-				'success' => true,
-				'message' => 'Icon CSS refresh triggered'
-			]);
-		}
-
-		if ($action === 'restore-icon-version') {
-			$timestamp = (int)$request->get_param('timestamp');
-			$icons = \JVBase\managers\IconsManager::getInstance();
-
-			if ($icons->restoreVersion($timestamp)) {
-				return new WP_REST_Response([
-					'success' => true,
-					'message' => 'Icon version restored successfully'
-				]);
-			}
-
-			return new WP_REST_Response([
-				'success' => false,
-				'message' => 'Failed to restore icon version'
-			], 500);
-		}
-
 		return $response;
 	}
 
@@ -936,7 +917,7 @@
 		// Get all registered icon sources
 		$all_sources = ['icons', 'forms', 'dash']; // You could get this dynamically if needed
 
-		$icons = \JVBase\managers\IconsManager::for($current_source);
+		$icons = IconsManager::for($current_source);
 		$versions = $icons->getVersionHistory();
 		$nonce = wp_create_nonce('wp_rest');
 

--
Gitblit v1.10.0