Admin: version management + notifications + auto-update #21
@@ -227,7 +227,8 @@ class AdminController
|
||||
}
|
||||
}
|
||||
$this->auditService->log('app_version_updated', 'App version config updated');
|
||||
$this->view->json(['success' => true, 'message' => 'App version updated successfully.']);
|
||||
Session::setFlash('success', 'App version updated successfully.');
|
||||
$this->view->redirect('/admin/app-version');
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<form id="versionForm">
|
||||
<form method="POST" action="/admin/app-version">
|
||||
<input type="hidden" name="_csrf_token" value="<?= $this->csrfToken() ?>">
|
||||
|
||||
<div class="form-group">
|
||||
@@ -52,35 +52,3 @@
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
document.getElementById('versionForm').addEventListener('submit', function(e) {
|
||||
e.preventDefault();
|
||||
const btn = this.querySelector('button[type="submit"]');
|
||||
btn.disabled = true;
|
||||
btn.innerHTML = '<i class="fas fa-spinner fa-spin"></i> Saving...';
|
||||
|
||||
fetch('/admin/app-version', {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'X-CSRF-Token': document.querySelector('meta[name="csrf-token"]')?.content || '',
|
||||
},
|
||||
body: new URLSearchParams(new FormData(this)),
|
||||
})
|
||||
.then(r => r.json())
|
||||
.then(data => {
|
||||
if (data.success) {
|
||||
showToast('success', data.message);
|
||||
} else {
|
||||
showToast('error', data.message);
|
||||
}
|
||||
btn.disabled = false;
|
||||
btn.innerHTML = '<i class="fas fa-save"></i> Save Version';
|
||||
})
|
||||
.catch(() => {
|
||||
showToast('error', 'Failed to save version');
|
||||
btn.disabled = false;
|
||||
btn.innerHTML = '<i class="fas fa-save"></i> Save Version';
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
Reference in New Issue
Block a user