| | |
| | | |
| | | 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': |
| | |
| | | ], 400); |
| | | } |
| | | |
| | | \JVBase\managers\CacheManager::invalidateAll($group); |
| | | Cache::for($group)?->flush(); |
| | | |
| | | return new \WP_REST_Response([ |
| | | 'success' => true, |
| | |
| | | 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)) { |
| | |
| | | } |
| | | |
| | | if ($icons->mergeVersions($timestamps)) { |
| | | // Regenerate CSS after merge |
| | | IconsManager::regenerateAllCSS([$source => true]); |
| | | |
| | | return new \WP_REST_Response([ |
| | | 'success' => true, |
| | | 'message' => 'Icon versions merged successfully' |
| | |
| | | |
| | | 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; |
| | | } |
| | | } |
| | | |
| | |
| | | </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> |
| | |
| | | </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> |
| | |
| | | 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 |
| | |
| | | ], 400); |
| | | } |
| | | |
| | | \JVBase\managers\CacheManager::invalidateAll($group); |
| | | $group = sanitize_text_field($request->get_param('group')); |
| | | Cache::invalidateGroup($group); |
| | | |
| | | return new WP_REST_Response([ |
| | | 'success' => true, |
| | |
| | | ]); |
| | | } |
| | | |
| | | 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; |
| | | } |
| | | |
| | |
| | | // 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'); |
| | | |