Files
accounting_dev/application/views/setting/layout.php
T
2026-05-26 08:07:45 +00:00

444 lines
17 KiB
PHP

<?php if(check_permission('setting', 'can_view')): ?>
<div class="container mt-4">
<div class="d-flex justify-content-between align-items-center mb-3">
<h5 class="mb-0">Pengaturan</h5>
</div>
<div class="row lign-items-stretch">
<!-- ================== 1. PENGATURAN UMUM ================== -->
<div class="col-md-6 mb-3">
<div class="card modern-card shadow-sm border-0 rounded-4 h-100">
<div class="card-body p-4">
<h6 class="mb-0">Umum</h6>
<hr>
<form action="<?= base_url('setting/save_umum') ?>" method="POST">
<div class="mb-3">
<label class="form-label">Nama Lembaga</label>
<input type="text" name="nama_lembaga" class="form-control" value="<?= $config->nama_lembaga ?>">
</div>
<div class="mb-3">
<label class="form-label">Pimpinan Lembaga</label>
<input type="text" name="pimpinan_lembaga" class="form-control" value="<?= $config->pimpinan_lembaga ?>">
</div>
<button type="submit" class="btn btn-success btn-add rounded-3">
Simpan
</button>
</form>
</div>
</div>
</div>
<!-- ================== 2. SETTING CARD ================== -->
<div class="col-md-6 mb-3">
<div class="card modern-card shadow-sm border-0 rounded-4 h-100">
<div class="card-body p-4">
<h6 class="mb-0">Setting Card</h6>
<hr>
<div class="items-card-center">
<img id="defaultBg" src="<?= base_url($config->card_background) ?>" hidden>
<div id="cardPreview"></div>
<small class="text-muted d-block mt-2 mb-4">Preview akan berubah otomatis</small>
</div>
<form action="<?= base_url('setting/save_card') ?>" method="POST" enctype="multipart/form-data">
<div class="mb-3">
<label class="form-label">Upload Background Kartu (Ukuran 300 x 480 pixel)</label>
<input type="file" name="card_background" id="bgInput" class="form-control" accept="image/*">
</div>
<button type="submit" class="btn btn-success btn-add rounded-3">
Simpan Background
</button>
</form>
</div>
</div>
</div>
<!-- ================== 3. SETTING WHATSAPP ================== -->
<div class="col-md-6 mb-3">
<div class="card modern-card shadow-sm border-0 rounded-4 h-100">
<div class="card-body p-4">
<h6 class="mb-0">Setting Whatsapp</h6>
<hr>
<form action="<?= base_url('setting/save_whatsapp') ?>" method="POST">
<div class="mb-3">
<label class="form-label">Mode WhatsApp</label>
<select class="form-select" id="waMode" name="wa_mode">
<option value="">-- Pilih --</option>
<option value="official" <?= ($config->wa_mode == 'official' ) ? 'selected' : '' ?>>Official API</option>
<option value="unofficial" <?= ($config->wa_mode == 'unofficial' ) ? 'selected' : '' ?>>Unofficial Gateway</option>
</select>
</div>
<!-- OFFICIAL -->
<div id="officialForm" style="display:none;">
<div class="mb-3">
<label class="form-label">Phone Number</label>
<input type="text" name="wa_phone" class="form-control" value="<?= $config->wa_phone; ?>">
</div>
<div class="mb-3">
<label class="form-label">Phone Number ID</label>
<input type="text" name="wa_phone_id" class="form-control" value="<?= $config->wa_phone_id; ?>">
</div>
<div class="mb-3">
<label class="form-label">WABA ID</label>
<input type="text" name="wa_waba_id" class="form-control" value="<?= $config->wa_waba_id; ?>">
</div>
<div class="mb-3">
<label class="form-label">Access Token</label>
<input type="text" name="wa_access_token" class="form-control" value="<?= $config->wa_access_token; ?>">
</div>
</div>
<!-- UNOFFICIAL -->
<div id="unofficialForm" style="display:none;">
<div class="mb-3">
<label class="form-label">Endpoint URL</label>
<input type="text" name="wa_endpoint" class="form-control" value="<?= $config->wa_endpoint; ?>">
</div>
<div class="mb-3">
<label class="form-label">API Key</label>
<input type="text" name="wa_api_key" class="form-control" value="<?= $config->wa_api_key; ?>">
</div>
<center>
<img id="waStatusImage" src="" style="width:220px; margin-top:15px;"><br>
<button type="button" id="scanWhatsappQR" class="btn btn-success btn-add rounded-3 mb-4">
Cek Tautan Whatsapp Gateway
</button>
</center>
</div>
<button type="submit" class="btn btn-success btn-add rounded-3">
Simpan
</button>
</form>
</div>
</div>
</div>
<!-- ================== 4. TEMPLATE PESAN ================== -->
<div class="col-md-6 mb-3">
<div class="card modern-card shadow-sm border-0 rounded-4 h-100">
<div class="card-body p-4">
<h6 class="mb-0">Setting Template Pesan</h6>
<hr>
<table class="table table-hover align-middle">
<thead>
<tr>
<th width="5%">No</th>
<th>Nama</th>
<th>Pesan</th>
<th width="10%">Aksi</th>
</tr>
</thead>
<tbody>
<?php foreach ($template_pesan as $i => $row): ?>
<tr>
<td><?= $i+1 ?></td>
<td><?= $row->nama_template ?></td>
<td><?= $row->isi_template ?></td>
<td>
<button class="btn btn-sm btn-primary" data-bs-toggle="modal" data-bs-target="#editModal<?= $row->id ?>">
Edit
</button>
</td>
</tr>
<!-- Modal Edit -->
<div class="modal fade" id="editModal<?= $row->id ?>">
<div class="modal-dialog modal-dialog-centered">
<div class="modal-content rounded-4">
<div class="modal-header">
<h6 class="modal-title">Edit Pesan</h6>
<button class="btn-close" data-bs-dismiss="modal"></button>
</div>
<form action="<?= base_url('setting/update_template_pesan') ?>" method="POST">
<div class="modal-body">
<input type="hidden" name="id" value="<?= $row->id ?>">
<div class="mb-3">
<label class="form-label">Nama</label>
<input type="text" name="nama_template" class="form-control" value="<?= $row->nama_template ?>">
</div>
<div class="mb-3">
<label class="form-label">Pesan</label>
<textarea name="isi_template" class="form-control" rows="12"><?= $row->isi_template ?></textarea>
</div>
</div>
<div class="modal-footer">
<button class="btn btn-secondary" data-bs-dismiss="modal">Batal</button>
<button class="btn btn-primary">Simpan</button>
</div>
</form>
</div>
</div>
</div>
<?php endforeach; ?>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
<!-- JS untuk dynamic show/hide -->
<script>
function showWaMode(mode) {
document.getElementById("officialForm").style.display = (mode === "official") ? "block" : "none";
document.getElementById("unofficialForm").style.display = (mode === "unofficial") ? "block" : "none";
}
// Saat dropdown berubah
document.getElementById("waMode").addEventListener("change", function() {
showWaMode(this.value);
});
// Saat halaman pertama kali load → pakai value dari dropdown (sudah diset PHP)
document.addEventListener("DOMContentLoaded", function() {
let initial = document.getElementById("waMode").value;
showWaMode(initial);
});
// =====================================================
// 1. LOAD BACKGROUND DEFAULT SAAT PAGE AWAL TERBUKA
// =====================================================
window.addEventListener("DOMContentLoaded", function () {
let defaultBgElement = document.getElementById("defaultBg");
let preview = document.getElementById("cardPreview");
if (!defaultBgElement) {
console.error("defaultBg tidak ditemukan!");
return;
}
if (!preview) {
console.error("cardPreview tidak ditemukan!");
return;
}
let defaultBg = defaultBgElement.src;
if (defaultBg && defaultBg !== "") {
validateAndLoadCard(defaultBg);
}
});
// =====================================================
// 2. EVENT: USER UPLOAD GAMBAR BACKGROUND BARU
// =====================================================
document.getElementById("bgInput").addEventListener("change", function (e) {
let file = e.target.files[0];
if (!file) return;
let reader = new FileReader();
reader.onload = function (evt) {
validateAndLoadCard(evt.target.result);
};
reader.readAsDataURL(file);
});
// =====================================================
// 3. VALIDASI RASIO GAMBAR (PORTRAIT / LANDSCAPE)
// =====================================================
function validateAndLoadCard(imgSrc) {
let img = new Image();
img.onload = function () {
let width = img.width;
let height = img.height;
let ratio = width / height;
console.log("Rasio gambar:", ratio);
let isPortrait = ratio < 0.9; // 2:3 atau sejenis
let isLandscape = ratio > 1.2; // 3:2 atau sejenis
if (!isPortrait && !isLandscape) {
alert("⚠️ Gambar tidak sesuai rasio ID Card!\nGunakan potret (2:3) atau landscape (3:2).");
return;
}
loadCardPreviewFromImage(imgSrc, isPortrait);
};
img.onerror = function () {
console.error("Gambar tidak bisa diload:", imgSrc);
};
img.src = imgSrc;
}
// =====================================================
// 4. LOAD PREVIEW + GANTI TEMPLATE
// =====================================================
function loadCardPreviewFromImage(imgSrc, isPortrait) {
let preview = document.getElementById("cardPreview");
if (!preview) {
console.error("Element #cardPreview tidak ditemukan!");
return;
}
// Set background image
preview.style.backgroundImage = `url('${imgSrc}')`;
// Reset semua class
preview.className = "";
// Tambahkan class sesuai orientasi
if (isPortrait) {
preview.classList.add("id-card-potret");
preview.innerHTML = portraitTemplate();
} else {
preview.classList.add("id-card-lemscape");
preview.innerHTML = landscapeTemplate();
}
console.log("Template loaded:", isPortrait ? "Potret" : "Landscape");
}
function portraitTemplate() {
return `
<div class="card-inner">
<div class="card-logo">
<img src="assets/img/logo.png">
</div>
<div class="card-title">Kartu Tanda Wali Santri</div>
<div class="photo-wrapper">
<img src="assets/img/foto.jpg">
</div>
<div class="card-info">
<div class="nama">Nama Santri</div>
<div class="nis">NIS: 00000000</div>
<div class="kelas">Tahun Masuk: -</div>
<div class="alamat">Alamat lengkap tampil di sini...</div>
</div>
<div class="qr-wrapper">
<img src="assets/img/qr.png" width="100%">
</div>
</div>
`;
}
function landscapeTemplate() {
return `
<div class="card-inner">
<div class="card-logo">
<img src="assets/img/logo.png">
</div>
<div class="card-title">Kartu Tanda Wali Santri</div>
<div class="landscape-content">
<div class="photo-wrapper">
<img src="assets/img/foto.jpg">
</div>
<div class="card-info">
<div class="nama">Nama Santri</div>
<div class="nis">NIS: 00000000</div>
<div class="kelas">Tahun Masuk: -</div>
<div class="alamat">Alamat lengkap tampil di sini...</div>
</div>
<div class="qr-wrapper">
<img src="assets/img/qr.png" width="100%">
</div>
</div>
</div>
`;
}
// -----------------------------
// Perintah untuk cek status whatsapp
// -----------------------------
document.getElementById("scanWhatsappQR").addEventListener("click", function () {
let counter = 0;
let imgTag = document.getElementById("waStatusImage");
function checkStatusLoop() {
fetch(`<?= base_url('setting/cek_whatsapp_status') ?>`)
.then(res => res.json())
.then(data => {
console.log("Status:", data.status);
imgTag.src = data.img; // tampilkan gambar ke <img>
if (data.status === "CONNECTED") {
console.log("Whatsapp sudah terhubung, stop loop");
return; // STOP AUTOMATIS
}
counter++;
if (counter < 50) {
setTimeout(checkStatusLoop, 2000);
} else {
console.log("Loop selesai 50x");
}
})
.catch(err => console.error(err));
}
checkStatusLoop();
});
</script>
<?php endif; ?>