cacheName = 'itsme'; parent::__construct(); } public function registerRoutes():void { Route::for('admin-cache') ->post([$this, 'handleCacheAction']) ->auth('admin') ->rateLimit(30) ->register(); Route::for('admin-icons') ->post([$this, 'handleIconAction']) ->auth('admin') ->rateLimit(30) ->register(); Route::for('admin-action') ->post([$this, 'adminAction']) ->auth('admin') ->rateLimit() ->register(); } /** * Handles admin actions from the custom WP Admin pages. * Extended by other managers that register admin subpages * @param WP_REST_Request $request * * @return WP_REST_Response */ public function adminAction(WP_REST_Request $request):WP_REST_Response { error_log('Request Params: '.print_r($request->get_param('action'), true)); return apply_filters( BASE.'admin_action_filter', new WP_REST_Response([ 'success' => false, 'message' => 'No filters found' ]), $request, sanitize_text_field($request->get_param('action')) ); } /** * @param array $filters * * @return array */ protected function checkFilters(array $filters) { global $karma; $out = []; foreach ($filters as $type => $value) { if (!array_key_exists($type, $karma)) { continue; } $out[$type] = jvbSanitizeIDList($value); } return $out; } /** * Handle cache-related actions */ public function handleCacheAction(\WP_REST_Request $request): \WP_REST_Response { $action = sanitize_text_field($request->get_param('action')); switch ($action) { case 'flush-all': $total = Cache::flushAll(); return new \WP_REST_Response([ 'success' => true, 'message' => $total.' caches flushed successfully' ]); case 'flush-cache': $group = sanitize_text_field($request->get_param('group')); if (empty($group)) { return new \WP_REST_Response([ 'success' => false, 'message' => 'No cache group specified' ], 400); } Cache::for($group)?->flush(); return new \WP_REST_Response([ 'success' => true, 'message' => "Cache group '{$group}' flushed successfully" ]); default: return new \WP_REST_Response([ 'success' => false, 'message' => 'Invalid action' ], 400); } } /** * Handle icon-related actions */ 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'); $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)) { return new \WP_REST_Response([ 'success' => false, 'message' => 'No timestamp provided' ], 400); } 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); case '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); } $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); } if ($icons->mergeVersions($timestamps)) { // Regenerate CSS after merge IconsManager::regenerateAllCSS([$source => true]); 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); default: return new \WP_REST_Response([ 'success' => false, 'message' => 'Invalid action' ], 400); } } }