diff --git a/resources/views/settings/sync.blade.php b/resources/views/settings/sync.blade.php
index 93dbf02..f62f140 100644
--- a/resources/views/settings/sync.blade.php
+++ b/resources/views/settings/sync.blade.php
@@ -121,6 +121,30 @@
Generate token untuk diinput di Aplikasi E-Jurnal Guru agar bisa push data presensi.
+ {{-- Status + Test Connection --}}
+ @if($hasEjurnalToken)
+
+
+
+
+
+ Belum diverifikasi
+
+
Masukkan URL E-Jurnal dan klik Test Koneksi.
+
+
+
+
+
+
+
+ @endif
+
{{-- Token display --}}
@if($hasEjurnalToken)
@@ -277,6 +301,65 @@
}
});
}
+
+ // === E-Jurnal Connection Test ===
+ const ejBtn = document.getElementById('test-ejurnal-btn');
+ const ejSt = document.getElementById('ejurnal-status');
+ const ejDot = document.getElementById('ejurnal-status-dot');
+ const ejTxt = document.getElementById('ejurnal-status-text');
+ const ejDet = document.getElementById('ejurnal-status-detail');
+ const ejUrlInput = document.getElementById('ejurnal-test-url');
+
+ if (ejBtn && ejSt && ejDot && ejTxt && ejDet && ejUrlInput) {
+ ejBtn.addEventListener('click', async function () {
+ const tokenDisplay = document.getElementById('ejurnalTokenDisplay');
+ const token = tokenDisplay ? tokenDisplay.textContent.trim() : '';
+ const url = ejUrlInput.value.trim().replace(/\/+$/, '');
+
+ if (!url || !token) {
+ ejSt.className = 'p-4 bg-amber-50 border border-amber-200 rounded-xl';
+ ejDot.className = 'inline-block w-2.5 h-2.5 rounded-full bg-amber-400';
+ ejTxt.className = 'text-sm font-semibold text-amber-800';
+ ejTxt.textContent = '⚠️ URL atau token belum lengkap';
+ ejDet.textContent = 'Isi URL E-Jurnal dan pastikan token sudah digenerate.';
+ return;
+ }
+
+ ejBtn.disabled = true;
+ ejBtn.innerHTML = ' Testing...';
+ ejSt.className = 'p-4 bg-slate-50 border border-slate-200 rounded-xl';
+ ejDot.className = 'inline-block w-2.5 h-2.5 rounded-full bg-slate-300';
+ ejTxt.className = 'text-sm font-semibold text-slate-500';
+ ejTxt.textContent = 'Menguji koneksi...';
+ ejDet.textContent = 'Menghubungi ' + url + '...';
+
+ try {
+ const resp = await fetch(url + '/api/v1/ping?token=' + encodeURIComponent(token));
+ const data = await resp.json();
+
+ if (resp.ok && data.success) {
+ ejSt.className = 'p-4 bg-emerald-50 border border-emerald-200 rounded-xl';
+ ejDot.className = 'inline-block w-2.5 h-2.5 rounded-full bg-emerald-500';
+ ejTxt.className = 'text-sm font-semibold text-emerald-800';
+ ejTxt.textContent = '✅ Terhubung ke E-Jurnal';
+ ejDet.innerHTML = 'Siswa: ' + (data.data?.students || '?') + ' terdata';
+ } else {
+ throw new Error(data.message || 'Token tidak valid');
+ }
+ } catch (err) {
+ ejSt.className = 'p-4 bg-red-50 border border-red-200 rounded-xl';
+ ejDot.className = 'inline-block w-2.5 h-2.5 rounded-full bg-red-500';
+ ejTxt.className = 'text-sm font-semibold text-red-800';
+ ejTxt.textContent = '❌ Tidak Terhubung';
+ ejDet.textContent = err.message.includes('Failed to fetch')
+ ? 'Tidak dapat menjangkau ' + url + '. Periksa URL.'
+ : err.message;
+ } finally {
+ ejBtn.disabled = false;
+ ejBtn.innerHTML = ' Test Koneksi';
+ }
+ });
+ }
});