From dd4910d678a6f34c2dcbeceada3da29f30f7eaf7 Mon Sep 17 00:00:00 2001 From: Andy Miller Date: Sun, 22 Feb 2026 22:54:43 -0500 Subject: [PATCH] fixes for scheduler-webhook plugin Signed-off-by: Andy Miller --- themes/grav/js/scheduler-admin.js | 101 ++---------------- .../partials/tools-scheduler.html.twig | 6 ++ 2 files changed, 17 insertions(+), 90 deletions(-) diff --git a/themes/grav/js/scheduler-admin.js b/themes/grav/js/scheduler-admin.js index 60df75fe..a8b29d9b 100644 --- a/themes/grav/js/scheduler-admin.js +++ b/themes/grav/js/scheduler-admin.js @@ -6,99 +6,20 @@ (function() { 'use strict'; - // Wait for DOM to be ready - document.addEventListener('DOMContentLoaded', function() { - // Check if we're on the scheduler config page - const healthStatusEl = document.getElementById('scheduler-health-status'); - const triggersEl = document.getElementById('scheduler-triggers'); - - if (!healthStatusEl && !triggersEl) { - return; // Not on scheduler page - } - - // Load scheduler status - loadSchedulerStatus(); - - // Refresh every 30 seconds if page is visible - let refreshInterval = setInterval(function() { - if (!document.hidden) { - loadSchedulerStatus(); - } - }, 30000); - - // Clean up interval when leaving page - window.addEventListener('beforeunload', function() { - clearInterval(refreshInterval); - }); - }); - - /** - * Load scheduler status via AJAX - */ - function loadSchedulerStatus() { - const healthStatusEl = document.getElementById('scheduler-health-status'); - const triggersEl = document.getElementById('scheduler-triggers'); - - // Get the admin base URL - const adminBase = GravAdmin ? GravAdmin.config.base_url_relative : '/admin'; - const nonce = GravAdmin ? GravAdmin.config.admin_nonce : ''; - - // Make AJAX request - fetch(adminBase + '/scheduler/status', { - method: 'GET', - headers: { - 'Accept': 'application/json', - 'X-Requested-With': 'XMLHttpRequest', - 'Admin-Nonce': nonce - }, - credentials: 'same-origin' - }) - .then(response => { - if (!response.ok) { - throw new Error('Network response was not ok'); - } - return response.json(); - }) - .then(data => { - // Update health status - if (healthStatusEl && data.health) { - healthStatusEl.innerHTML = data.health; - healthStatusEl.classList.remove('text-muted'); - } - - // Update triggers - if (triggersEl && data.triggers) { - triggersEl.innerHTML = data.triggers; - triggersEl.classList.remove('text-muted'); - } - }) - .catch(error => { - console.error('Error loading scheduler status:', error); - - // Show error message - if (healthStatusEl) { - healthStatusEl.innerHTML = '
Failed to load status
'; - } - if (triggersEl) { - triggersEl.innerHTML = '
Failed to load triggers
'; - } - }); - } - /** * Test scheduler webhook */ window.testSchedulerWebhook = function() { const token = document.querySelector('input[name="data[scheduler][modern][webhook][token]"]')?.value; - + if (!token) { alert('Please set a webhook token first'); return; } - - const siteUrl = window.location.origin; - const webhookUrl = siteUrl + '/scheduler/webhook'; - + + const baseUrl = window.schedulerBaseUrl || window.location.origin; + const webhookUrl = baseUrl + '/scheduler/webhook'; + fetch(webhookUrl, { method: 'POST', headers: { @@ -118,27 +39,27 @@ alert('Webhook test error: ' + error.message); }); }; - + /** * Generate secure token */ window.generateSchedulerToken = function() { const tokenField = document.querySelector('input[name="data[scheduler][modern][webhook][token]"]'); - + if (!tokenField) { return; } - + // Generate random token (32 bytes = 64 hex chars) const array = new Uint8Array(32); crypto.getRandomValues(array); const token = Array.from(array, byte => byte.toString(16).padStart(2, '0')).join(''); - + tokenField.value = token; - + // Trigger change event const event = new Event('change', { bubbles: true }); tokenField.dispatchEvent(event); }; - + })(); \ No newline at end of file diff --git a/themes/grav/templates/partials/tools-scheduler.html.twig b/themes/grav/templates/partials/tools-scheduler.html.twig index 0034383c..1e57c47d 100644 --- a/themes/grav/templates/partials/tools-scheduler.html.twig +++ b/themes/grav/templates/partials/tools-scheduler.html.twig @@ -6,6 +6,12 @@ {% set user = grav.scheduler.whoami() %} {% set webhook_enabled = grav.scheduler.isWebhookEnabled() %} {% set active_triggers = grav.scheduler.getActiveTriggers() %} + {% set health_data = grav.scheduler.getHealthStatus() %} + + {% if active_triggers|length > 0 %} {# We have at least one active trigger method #}