From 0afb2c0046b55c123eafb4ab9ee77efa68d12463 Mon Sep 17 00:00:00 2001
From: Jake Vanderwerf <get@jakevanderwerf.ca>
Date: Sat, 06 Jun 2026 17:15:31 +0000
Subject: [PATCH] =Starting the Favourites.js setup, converting previous Northeh stuff to new Registrar, fixing up Square.php integration to match
---
inc/rest/routes/AdminRoutes.php | 225 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 225 insertions(+), 0 deletions(-)
diff --git a/inc/rest/routes/AdminRoutes.php b/inc/rest/routes/AdminRoutes.php
new file mode 100644
index 0000000..4f89e76
--- /dev/null
+++ b/inc/rest/routes/AdminRoutes.php
@@ -0,0 +1,225 @@
+<?php
+namespace JVBase\rest\routes;
+
+use JVBase\JVB;
+use JVBase\managers\Cache;
+use JVBase\managers\IconsManager;
+use JVBase\rest\Rest;
+use JVBase\rest\Route;
+use JVBase\rest\PermissionHandler;
+use WP_Query;
+use WP_Error;
+use WP_REST_Request;
+use WP_REST_Response;
+
+if (!defined('ABSPATH')) {
+ exit; // Exit if accessed directly
+}
+
+class AdminRoutes extends Rest
+{
+ protected array $fields;
+ protected $meta;
+ protected string $metaType;
+ protected string $content;
+
+ public function __construct()
+ {
+ $this->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);
+ }
+ }
+}
--
Gitblit v1.10.0