Partnership: fix onclick functions not accessible outside IIFE

Tab pages use full page reloads (not AJAX) — function declarations inside
the IIFE are not in global scope, so onclick= attributes fail silently.

Fix: assign all onclick-callable functions to window.*
Replace vvRunById() calls with direct fetch (vvRunById is also IIFE-scoped
in scheduler.php, unavailable in the partnership tab context).
Add .catch() handlers so network/parse errors surface as alerts.
This commit is contained in:
Gmer4Lfe
2026-05-30 18:21:31 -04:00
parent a5755921ab
commit be5332d0a4
+34 -27
View File
@@ -342,48 +342,55 @@ function _render(data) {
// ── Actions ───────────────────────────────────────────────────────────────────
function vvPtPhase1(btn, hostId) {
function _vvPtRun(id, extraArgs) {
const params = {id, manual: '1'};
if (extraArgs) params.extra_args = extraArgs;
return fetch('/plugins/varaverk/api/run.php', {
method: 'POST',
body: new URLSearchParams(params)
}).then(r => r.json());
}
window.vvPtPhase1 = function(btn, hostId) {
if (!confirm(`Phase 1: SSH key exchange + conf push to ${hostId}?\n\nSafe to run before ${hostId} has Varaverk installed.`)) return;
btn.disabled = true;
btn.textContent = '⟳ Starting…';
fetch('/plugins/varaverk/api/run.php', {
method: 'POST',
body: new URLSearchParams({id: 'Partnership/partnership_onboard.sh', manual: '1', extra_args: '--phase1-only'})
}).then(r => r.json()).then(d => {
if (!d.ok) { alert('Failed: ' + (d.error ?? 'Unknown error')); }
setTimeout(() => { btn.disabled = false; btn.textContent = '▶ Phase 1: SSH + Conf Push'; }, 3000);
});
}
_vvPtRun('Partnership/partnership_onboard.sh', '--phase1-only')
.then(d => { if (!d.ok) alert('Failed: ' + (d.error ?? 'Unknown error')); })
.catch(e => alert('Error: ' + e))
.finally(() => setTimeout(() => { btn.disabled = false; btn.textContent = '▶ Phase 1: SSH + Conf Push'; }, 3000));
};
function vvPtPhase2(btn, hostId) {
if (!confirm(`Phase 2: Deploy containers + arr stack + establish partnership on ${hostId}?\n\nThis requires ${hostId} to have Varaverk installed and SSH keys set up.`)) return;
window.vvPtPhase2 = function(btn, hostId) {
if (!confirm(`Phase 2: Deploy containers + arr stack + establish partnership on ${hostId}?\n\nRequires ${hostId} to have Varaverk installed and SSH keys set up.`)) return;
btn.disabled = true;
btn.textContent = '⟳ Starting…';
fetch('/plugins/varaverk/api/run.php', {
method: 'POST',
body: new URLSearchParams({id: 'Partnership/partnership_onboard.sh', manual: '1', extra_args: '--phase2-only'})
}).then(r => r.json()).then(d => {
if (!d.ok) { alert('Failed: ' + (d.error ?? 'Unknown error')); }
setTimeout(() => { btn.disabled = false; btn.textContent = '▶ Run Phase 2 Manually'; }, 3000);
});
}
_vvPtRun('Partnership/partnership_onboard.sh', '--phase2-only')
.then(d => { if (!d.ok) alert('Failed: ' + (d.error ?? 'Unknown error')); })
.catch(e => alert('Error: ' + e))
.finally(() => setTimeout(() => { btn.disabled = false; btn.textContent = '▶ Run Phase 2 Manually'; }, 3000));
};
function vvPtOnboard(btn) {
window.vvPtOnboard = function(btn) {
if (!confirm('Run full partnership_onboard.sh?\n\nRun on the MIRROR first, then on the OWNER.\n\nUse Phase 1 + Phase 2 buttons for step-by-step control.')) return;
btn.disabled = true;
btn.textContent = '⟳ Starting…';
vvRunById('Partnership/partnership_onboard.sh');
setTimeout(() => { btn.disabled = false; btn.textContent = '▶ Onboard (Mirror)'; }, 4000);
}
_vvPtRun('Partnership/partnership_onboard.sh')
.then(d => { if (!d.ok) alert('Failed: ' + (d.error ?? 'Unknown error')); })
.catch(e => alert('Error: ' + e))
.finally(() => setTimeout(() => { btn.disabled = false; btn.textContent = '▶ Onboard (Mirror)'; }, 4000));
};
function vvPtOffboard(btn) {
window.vvPtOffboard = function(btn) {
if (btn.style.opacity === '0.35' || btn.style.cursor === 'default') return;
if (!confirm('Run partnership_offboard.sh?\n\nThis will end the partnership, reconfigure WebUIs, and revoke SSH access.\n\nContinue?')) return;
btn.disabled = true;
btn.textContent = '⟳ Starting…';
vvRunById('Partnership/partnership_offboard.sh');
setTimeout(() => { btn.disabled = false; btn.textContent = '▶ Offboard'; }, 4000);
}
_vvPtRun('Partnership/partnership_offboard.sh')
.then(d => { if (!d.ok) alert('Failed: ' + (d.error ?? 'Unknown error')); })
.catch(e => alert('Error: ' + e))
.finally(() => setTimeout(() => { btn.disabled = false; btn.textContent = '▶ Offboard'; }, 4000));
};
// ── Poll ──────────────────────────────────────────────────────────────────────